2011-08-12 31 views
1

我试图从彩色图像中获取黑白直方图数据。然而,目前的设置,我与我的直方图只显示颜色数据我敢肯定,这是我必须修改我当前的数学设置。从直方图中获取黑白亮度值

// Current setup on how to render histogram data to the screen with hist being the calculated histogram 
histimg = Mat::zeros(200, 320, CV_8UC3) 
int binW = histimg.cols/16; 
Mat buf(1, 16, CV_8UC3); 
for(int i = 0; i < 16; i++) 
{ 
    buf.at<Vec3b>(i) = Vec3b(saturate_cast<uchar>(i*180./16), 255, 255); 
} 
cvtColor(buf, buf, CV_HSV2BGR); 

for(int i = 0; i < 16; i++) 
{ 
    int val = saturate_cast<int>(hist.at<float>(i)*histimg.rows/255); 
    rectangle(histimg, Point(i*binW,histimg.rows), 
     Point((i+1)*binW,histimg.rows - val), 
     Scalar(buf.at<Vec3b>(i)), -1, 8); 
} 

在此先感谢您的任何建议。

+0

我不知道你_I的意思我试图从颜色image._你的意思是你想要的彩色图像的灰度强度直方图获得黑白直方图数据?还是你想绘制一个黑色和白色的直方图?另外,计算机视觉中的“黑白”与电视中的不同。在电视上它意味着各种各样的灰色阴影。在我们的世界里,它是代表黑色或白色的两个二进制值之一。 – SSteve

+0

我有用于创建直方图的彩色图像。根据我的数学,我可以得到不同的红色,绿色和蓝色以及它们的强度值。我想对黑色,(0,0,0)和白色(255,255,255)颜色值也是这样。 – Seb

回答

1

这里有两种方法:

  1. 创建whiteCountblackCount变量。遍历所有像素,如果像素为(255,255,255),则增加whiteCount,如果像素为(0,0,0),则增加blackCount

  2. 将图像转换为灰度图,创建直方图并查看第一个和最后一个bin。

+0

第二种方法似乎是最好的方法。谢谢 – Seb