显示直方图openCV

时间:2013-11-11 21:59:22

标签: opencv image-processing histogram

我有我计算过的图像的直方图。我想将其显示为图像,以便我可以实际看到直方图。我认为我的问题与缩放有关,虽然我对左上角的0,0开始的坐标系有点困惑。

int rows = channel.rows;
int cols = channel.cols;
int hist[256] = {0};
for(int i = 0; i<rows; i++)
{
    for(int k = 0; k<cols; k++ )
    {
        int value = channel.at<cv::Vec3b>(i,k)[0];
        hist[value] = hist[value] + 1;
    }
}

Mat histPlot = cvCreateMat(256, 500,CV_8UC1);
for(int i = 0; i < 256; i++)
{
    int mag = hist[i];
    line(histPlot,Point(i,0),Point(i,mag),Scalar(255,0,0));
}

namedWindow("Hist",1);
imshow("Hist",histPlot);

这是我创建直方图并显示结果的计算方法。如果我在第二次循环中使用mag / 100,那么我会看到一些相似的情节(尽管是颠倒的)。每当我调整图像的值时,我都会调用此方法,因此直方图也应该改变形状,这似乎不会发生。任何帮助缩放直方图并正确显示它都是值得赞赏的。

1 个答案:

答案 0 :(得分:0)

  • 请不要使用cvCreateMat(也就是旧的c-api),你似乎也有行和列错了,另外,如果你想要一个颜色绘图,你需要一个彩色图像,所以:

    Mat histPlot( 500, 256, CV_8UC3 );

  • 图片原点是左上角(0,0),所以你必须把y反过来:

    line(histPlot,Point(i,histPlot.rows-1),Point(i,histPlot.rows-1-mag/100),Scalar(255,0,0));