2017-07-23 58 views
-1

我的目標不當使用是產生的灰度圖像的直方圖。我使用的代碼是:的calcHist

Mat img = imread("leeds-castle.jpg",IMREAD_GRAYSCALE); 
Mat hst; 
int hstsize = 256; 
float ranges[] = { 0,256 }; 
float *hstrange = { ranges }; 
calcHist(img, 1,0, Mat(), hst, 1, &hstsize,&hstrange,true,false); 
int hst_w = 512, hst_h = 400; 
int bin_w = cvRound((double)hst_w/256); 
Mat histimg(hst_w, hst_h, CV_8U); 
normalize(hst, hst, 0, histimg.rows, NORM_MINMAX, -1, Mat()); 
for (int i = 1; i < 256; i++) 
{ 
    line(histimg, Point(bin_w*(i - 1), hst_h - cvRound(hst.at<float>(i - 1))), Point(bin_w*i, hst_h - cvRound(hst.at<float>(i))), 2, 8, 0); 
} 
imshow("Histogram", histimg); 

的唯一錯誤是calcHist()函數的用法。它有什麼問題嗎?

+1

有什麼錯誤? – beaker

+0

錯誤是\t「C2665 \t‘CV :: calcHist’:無3個重載可以轉換所有的參數類型」 –

回答

0

見上面calcHist的意見,以確定正確的用法:

// original image 
Mat img = imread("leeds-castle.jpg",IMREAD_GRAYSCALE); 
// NOTE: check if img.channels is equal to 1 

// histogram 
Mat hst; 

// number of bins 
int hstsize = 256; 
float ranges[] = { 0,256 }; 
float *hstrange = { ranges }; 

// parameters for histogram calculation 
bool uniform = true; 
bool accumulate = false; 

// calculate histogram 
// the '&' was missing here 
calcHist(&img, 1,0, Mat(), hst, 1, &hstsize,&hstrange,true,false); 
+0

你能描述你的代碼所做的,爲什麼這樣可以修復OP的問題,什麼樣的變化?就目前而言,你的帖子不是一個答案,更多的是沃爾多的遊戲。 – beaker

+0

@beaker:我相信那些誰(可以)閱讀註釋可以找到答案,而無需打在哪裏金都:-) – Totoro

+0

切割出代碼的三分之一,將注意力集中到被更改有所幫助線,但代碼只回答通常被認爲不如那些包括解釋爲什麼以及如何更新代碼工作的幫助。見https://meta.stackoverflow.com/questions/290231/is-it-wrong-to-ask-for-an-explanation-of-how-why-the-code-works-in-code-only-ans和其他許多元。 – beaker