我有我计算过的图像的直方图。我想将其显示为图像,以便我可以实际看到直方图。我认为我的问题与缩放有关,虽然我对左上角的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,那么我会看到一些相似的情节(尽管是颠倒的)。每当我调整图像的值时,我都会调用此方法,因此直方图也应该改变形状,这似乎不会发生。任何帮助缩放直方图并正确显示它都是值得赞赏的。
答案 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));