2017-07-23 23 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