• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 【OpenCV】繪制直方圖

    和這一篇《數字圖像直方圖》內容是一樣的,只是使用Mat格式實現~


    繪制灰色直方圖

    //繪制灰度直方圖
    int main(  )
    {
    	Mat src,gray;
    	src=imread("baboon.jpg");
    	cvtColor(src,gray,CV_RGB2GRAY);
    	int bins = 256;
    	int hist_size[] = {bins};
    	float range[] = { 0, 256 };
    	const float* ranges[] = { range};
    	MatND hist;
    	int channels[] = {0};
    
    	calcHist( &gray, 1, channels, Mat(), // do not use mask
    		hist, 1, hist_size, ranges,
    		true, // the histogram is uniform
    		false );
    
    	double max_val;
    	minMaxLoc(hist, 0, &max_val, 0, 0);
    	int scale = 2;
    	int hist_height=256;
    	Mat hist_img = Mat::zeros(hist_height,bins*scale, CV_8UC3);
    	for(int i=0;i<bins;i++)
    	{
    		float bin_val = hist.at<float>(i); 
    		int intensity = cvRound(bin_val*hist_height/max_val);  //要繪制的高度
    		rectangle(hist_img,Point(i*scale,hist_height-1),
    			Point((i+1)*scale - 1, hist_height - intensity),
    			CV_RGB(255,255,255));
    	}
    	imshow( "Source", src );
    	imshow( "Gray Histogram", hist_img );
    	waitKey(10000000000);
    	return 0;
    }

    實驗結果:


    繪制RGB三色直方圖

    //繪制RGB三色分量直方圖
    int main(  )
    {
    	Mat src;
    	src=imread("baboon.jpg");
    	int bins = 256;
    	int hist_size[] = {bins};
    	float range[] = { 0, 256 };
    	const float* ranges[] = { range};
    	MatND hist_r,hist_g,hist_b;
    	int channels_r[] = {0};
    
    	calcHist( &src, 1, channels_r, Mat(), // do not use mask
    		hist_r, 1, hist_size, ranges,
    		true, // the histogram is uniform
    		false );
    
    	int channels_g[] = {1};
    	calcHist( &src, 1, channels_g, Mat(), // do not use mask
    		hist_g, 1, hist_size, ranges,
    		true, // the histogram is uniform
    		false );
    
    	int channels_b[] = {2};
    	calcHist( &src, 1, channels_b, Mat(), // do not use mask
    		hist_b, 1, hist_size, ranges,
    		true, // the histogram is uniform
    		false );
    	double max_val_r,max_val_g,max_val_b;
    	minMaxLoc(hist_r, 0, &max_val_r, 0, 0);
    	minMaxLoc(hist_g, 0, &max_val_g, 0, 0);
    	minMaxLoc(hist_b, 0, &max_val_b, 0, 0);
    	int scale = 1;
    	int hist_height=256;
    	Mat hist_img = Mat::zeros(hist_height,bins*3, CV_8UC3);
    	for(int i=0;i<bins;i++)
    	{
    		float bin_val_r = hist_r.at<float>(i); 
    		float bin_val_g = hist_g.at<float>(i);
    		float bin_val_b = hist_b.at<float>(i);
    		int intensity_r = cvRound(bin_val_r*hist_height/max_val_r);  //要繪制的高度
    		int intensity_g = cvRound(bin_val_g*hist_height/max_val_g);  //要繪制的高度
    		int intensity_b = cvRound(bin_val_b*hist_height/max_val_b);  //要繪制的高度
    		rectangle(hist_img,Point(i*scale,hist_height-1),
    			Point((i+1)*scale - 1, hist_height - intensity_r),
    			CV_RGB(255,0,0));
    
    		rectangle(hist_img,Point((i+bins)*scale,hist_height-1),
    			Point((i+bins+1)*scale - 1, hist_height - intensity_g),
    			CV_RGB(0,255,0));
    
    		rectangle(hist_img,Point((i+bins*2)*scale,hist_height-1),
    			Point((i+bins*2+1)*scale - 1, hist_height - intensity_b),
    			CV_RGB(0,0,255));
    
    	}
    	imshow( "Source", src );
    	imshow( "RGB Histogram", hist_img );
    	waitKey(10000000000);
    	return 0;
    }
    

    實驗結果:


    繪制二維直方圖

    //繪制H-S二維直方圖
    int main( )
    {
    	Mat src,hsv;
    	src=imread("baboon.jpg");
    	cvtColor(src, hsv, CV_BGR2HSV);
    	// Quantize the hue to 30 levels
    	// and the saturation to 32 levels
    	int hbins = 256, sbins = 180;
    	int histSize[] = {hbins, sbins};
    	// hue varies from 0 to 179, see cvtColor
    	float hranges[] = { 0, 180 };
    	// saturation varies from 0 (black-gray-white) to
    	// 255 (pure spectrum color)
    	float sranges[] = { 0, 256 };
    	const float* ranges[] = { hranges, sranges };
    	MatND hist;
    	// we compute the histogram from the 0-th and 1-st channels
    	int channels[] = {0, 1};
    	calcHist( &hsv, 1, channels, Mat(), // do not use mask
    		hist, 2, histSize, ranges,
    		true, // the histogram is uniform
    		false );
    	double maxVal=0;
    	minMaxLoc(hist, 0, &maxVal, 0, 0);
    	int scale = 2;
    	Mat histImg = Mat::zeros(sbins*scale, hbins*scale, CV_8UC3);
    	for( int h = 0; h < hbins; h++ )
    		for( int s = 0; s < sbins; s++ )
    		{
    			float binVal = hist.at<float>(h, s);
    			int intensity = cvRound(binVal*255/maxVal);
    			rectangle( histImg, Point(h*scale, s*scale),
    				Point( (h+1)*scale - 1, (s+1)*scale - 1),
    				Scalar::all(intensity),
    				CV_FILLED );
    		}
    	namedWindow( "Source", 1 );
    	imshow( "Source", src );
    	namedWindow( "H-S Histogram", 1 );
    	imshow( "H-S Histogram", histImg );
    	waitKey(10000000000);
    	return 0;
    }

    實驗結果:



    (轉載請注明作者和出處:http://blog.csdn.net/xiaowei_cqu未經允許請勿用于商業用途)




    版權聲明:本文為iteye_18800原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/iteye_18800/article/details/82488911

    智能推薦

    使用Opencv繪制灰度直方圖/對比

    一.所需結構體 結構體原型: 二.所需函數 1.cvCalcHist: 函數功能:用于計算圖像直方圖 函數原型: 參數介紹: 返回值:無 2.CvCreateHist: 函數功能:用于創建直方圖 函數原型: 參數介紹: 返回值:成功返回一個指向堆中CvHistogram結構體的CvHistogram指針 3.cvGetMinMaxHistValue: 函數功能:用于統計直方圖中最小值和最大值 函數...

    opencv 繪制圖像直方圖

    為圖像繪制直方圖,效果圖如下: 代碼如下:...

    OpenCV python 繪制圖片直方圖

    OpenCV python 繪制圖片直方圖 處理圖片[source.jpg] 處理結果:...

    opencv(18)---直方圖計算以及繪制

    基本概念 直方圖是對數據進行統計的一種方法, 可以直觀表現圖像某屬性的數值(頻率)分布情況, 包括灰度直方圖、RGB直方圖等 數字直方圖 圖像直方圖 相關概念 函數原型 1.dims: 需要統計得特征的數目, 只統計灰度值—dims=1 統計RGB值—dims=3 2.bins: 每個特征空間子區域段的數目,也 可稱為組距(簡單理解為直方圖分 成幾個柱子組成) 3.rang...

    猜你喜歡

    (Python+OpenCV)繪制灰度直方圖

    繪制單通道直方圖和RGB三通道直方圖。   IDE:Jupyter Lab   原圖: 對原圖進行降維: 直方圖: RGB三通道直方圖:...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡