直方图计算的一个非常简化的版本仍然会出错

时间:2012-10-21 08:44:03

标签: image-processing opencv

我仍在尝试理解直方图计算。正如我在其他帖子中所述,我无法理解官方教程和我书中的教程。

我正在谈论的教程位于:http://docs.opencv.org/doc/tutorials/imgproc/histograms/histogram_calculation/histogram_calculation.html

我真的很难阅读,尤其是绘制直方图的部分。它涉及拆分,标准化,给出的任何解释,例如hist_w和hist_h的值,以及所有复杂的行函数。

所以我决定以简单的方式写下我学到的东西,看看直方图的工作情况,看看它是怎么回事。这就是我写的:

int _tmain(int argc, _TCHAR* argv[])
{
Mat src, dst, final;

src = imread("c:\\car.jpg", 0);

int histsize = 256;
float range[] = {0, 256};
const float* histrange = { range };

bool uniform = true; bool accumulate = false;

calcHist(&src, 1, 0, Mat(), dst, 1, &histsize, &histrange, uniform, accumulate);

for(int h= 0; h<histsize; h++)
{
    float value = dst.at<float>(h);

    line(final, Point(h,(histsize-1)), Point(h, value), Scalar(0,0,0));
}

namedWindow("meh",CV_WINDOW_AUTOSIZE);
imshow("meh", final);
waitKey(0);


return 0;

}

图像以灰度加载,因此无需拆分。只需应用calcHist并使用线函数绘制它。

但是在调用时它会给出一个未处理的异常错误。我相信它必须是因为我的简化线功能。正如在线教程中一样,坐标的计算过于复杂。

但我认为这应该有用,让我解释一下。在第一个循环中,h将为0,因此坐标为(0,255) and (0,[value of histogram at 0]),类似于第二个循环,坐标将为(1,255) and (1,[value of histogram at 0]),依此类推..

这是理论上直方图是正确的。它应该工作..为什么不呢?

编辑::它在imshow("meh", final);

处中断

0 个答案:

没有答案