【发布时间】:2013-11-15 12:43:42
【问题描述】:
我是 OpenCV 新手,正在学习绘制单通道图像的直方图。当我运行程序时,我只得到一条白线。请告诉我这段代码有什么问题。
int histSize[1] = {256};
float hranges[2] = {0.0, 255.0};
const float* ranges[1] = {hranges};
int channels[1] = {0};
cv::MatND getHistogram(const cv::Mat &image) {
cv::MatND hist;
cv::calcHist(&image,1,channels,cv::Mat(),hist,1,histSize,ranges);
return hist;
}
cv::Mat getHistogramImage(const cv::Mat &image) {
cv::MatND hist = getHistogram(image);
double minVal = 0;
double maxVal = 0;
cv::minMaxLoc(hist,&minVal,&maxVal,0,0);
cv::Mat histImg(histSize[0],histSize[0],CV_8U,cv::Scalar(255));
int hpt = static_cast<int>(0.9*histSize[0]);
for(int h=0; h<256; ++h){
float binVal = hist.at<float>(h);
int intensity = static_cast<int>(binVal*hpt/maxVal);
cv::line(histImg,cv::Point(h,histSize[0]),
cv::Point(h,histSize[0]-intensity),
cv::Scalar::all(0));
}
return histImg;
}
【问题讨论】:
-
你见过official documentation进行直方图计算吗?我认为它会给你所有你需要的答案..
-
是的,我指的是同一页面。谢谢。
-
@Shubham 从that page 获取代码,编译它,运行它并确保它可以工作。然后,将其调整为单通道图像。我相信你会发现你的错误。
-
是的,我使用了该代码并且现在工作正常,但我仍然无法在上面的代码中发现任何错误。
-
我已经测试了你的代码,它对我来说很好。