国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

opencv學習筆記(二十七)實例:顯示一張灰度圖片的直方圖

2019-11-08 02:02:15
字體:
來源:轉載
供稿:網友

程序實例:

#include <opencv2/opencv.hpp>#define cvQueryHistValue_1D( hist, idx0 ) ((float)cvGetReal1D( (hist)->bins, (idx0)))int main( ) { iplImage * src= cvLoadImage("a.jpg"); IplImage* gray_plane = cvCreateImage(cvGetSize(src),8,1); cvCvtColor(src,gray_plane,CV_BGR2GRAY); int hist_size = 256; //直方圖尺寸 int hist_height = 256; float range[] = {0,255}; //灰度級的范圍 float* ranges[]={range}; //就是用指針指向這個數組,//然后這個指針就能訪問和控制這個數組了。 //創建一維直方圖,統計圖像在[0 255]像素的均勻分布 CvHistogram* gray_hist = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1); //計算灰度圖像的一維直方圖 cvCalcHist(&gray_plane,gray_hist,0,0); //歸一化直方圖 cvNormalizeHist(gray_hist,1.0); int scale = 2; //創建一張一維直方圖的“圖”,橫坐標為灰度級,縱坐標為像//素個數 IplImage* hist_image = cvCreateImage(cvSize(hist_size*scale,hist_height),8,3); cvZero(hist_image); //統計直方圖中的最大直方塊 float max_value = 0; cvGetMinMaxHistValue(gray_hist, 0,&max_value,0,0); //分別將每個直方塊的值繪制到圖中 for(int i=0;i<hist_size;i++) { float bin_val = cvQueryHistValue_1D(gray_hist,i); //像素i的概率 //為什么稱為概率呢?因為我們知道歸一化直方圖之后,所有的直方塊之和=1,//所以我們利用cvQueryHistValue_1D得到的直方塊的值其實就是概率了。 int intensity = cvRound(bin_val*hist_height/max_value); //要繪制的高度 cvRectangle(hist_image, cvPoint(i*scale,hist_height-1), cvPoint((i+1)*scale - 1, hist_height - intensity), CV_RGB(255,255,255)); } cvNamedWindow( "GraySource", 1 ); cvShowImage("GraySource",gray_plane); cvNamedWindow( "H-S Histogram", 1 ); cvShowImage( "H-S Histogram", hist_image ); cvWaitKey(0); }

代碼理解: 1、float* histRange = { range }; 就是用指針指向這個數組,然后這個指針就能訪問和控制這個數組了。 2、 int scale = 2; IplImage* hist_image = cvCreateImage(cvSize(hist_size*scale,hist_height),8,3); cvZero(hist_image); 這個hist_size*scale里面的“*”是“乘法”的意思,最終的圖像是橫坐標是縱坐標的2倍,scale換成1就是兩個一樣高。 3、cvRound——前面有,作用是對一個double型的數進行四舍五入,并返回一個整型數! 畫直方圖的一般步驟: 1、將圖片黑白化(彩色圖片轉成3個通道,各個通道單獨處理)。 2、設置直方圖的range(要統計的灰度范圍,一般都是[0~255])和尺寸。 3、創建一個直方圖,然后統計圖像在[0 255]像素的分布。 4、利用cvCalcHist計算。 5、利用 cvNormalizeHist歸一化直方圖。 6、創建一張圖片,再創建一個矩形,將直方圖“畫在其中”。 7、窗口顯示。 這里寫圖片描述 這里寫圖片描述

錯誤解析:

本來運行程序時,提示——“cvQueryHistValue_1D”: 找不到標識符。然后加入

#define cvQueryHistValue_1D( hist, idx0 ) ((float)cvGetReal1D( (hist)->bins, (idx0)))

就好使了。

“cvQueryHistValue_2D”: 找不到標識符 在代碼中加入:

#define cvQueryHistValue_2D( hist, idx0, idx1 ) cvGetReal2D( (hist)->bins, (idx0), (idx1) )

然后就編譯通過。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 措勤县| 哈密市| 桐庐县| 景谷| 浪卡子县| 齐河县| 日土县| 柘城县| 庆云县| 郸城县| 仙游县| 突泉县| 鄱阳县| 墨脱县| 敖汉旗| 屯留县| 大关县| 嘉峪关市| 桐庐县| 延吉市| 潼南县| 城固县| 和静县| 基隆市| 南宁市| 浦江县| 灌南县| 芷江| 桐梓县| 宝清县| 昌乐县| 革吉县| 石泉县| 唐河县| 中阳县| 武宁县| 罗城| 凭祥市| 南康市| 旺苍县| 安溪县|