OpenCV 中的像素值超过 255 - 1D 直方图

Posted

技术标签:

【中文标题】OpenCV 中的像素值超过 255 - 1D 直方图【英文标题】:Pixel Values in OpenCV exceeds 255 - 1D Histogram 【发布时间】:2013-01-15 08:54:55 【问题描述】:

http://www.huahongquan.com/index.php/blog/x-ly-nh-video-s/11-opencv-topic-02-get-histogram

我使用他的代码为我的图像计算一维直方图。问题是,范围设置为 0-255,但是当我打印值时,我得到的像素值超过 255(即 15842、73132)

我需要在代码中添加什么内容吗?

@George 这就是我打印值和使用 Mat 的方式。

for(int i = 0 ; i < 256 ; i++)
cout << "Value"  << i << " = " << histogram.at<float>(i) << endl;        

【问题讨论】:

您使用什么代码来打印这些值?如果只使用 C++ IO 流,则可能需要类型转换来定义数据是 unsigned char 而不是 int。当然IplImage必须有IPL_DEPTH_8U的色深,否则值那么大也是正常的。 @GeorgeAprilis 谢谢,但我已将它们转换为灰度。我如何打印上面的值(我编辑了我的 Q)谢谢! 所以你的意思是它现在可以进行转换? 【参考方案1】:

我认为你说的 0-255 范围是 bin 的数量,而不是像素值。

histogram.at&lt;float&gt;(i) 是落入 bin i 的像素数,因此它可以是从 0 到输入图像大小(宽 * 高)的任意整数。

例如,输出Value254 = 4182表示有4182个像素,其值为254。

【讨论】:

以上是关于OpenCV 中的像素值超过 255 - 1D 直方图的主要内容,如果未能解决你的问题,请参考以下文章

详解为什么OpenCV的直方图计算函数calcHist()计算出的灰度值为255的像素个数为0

设置Mat、opencv的具体像素值

Opencv之图像灰度化

opencv里面直方图的意义

OpenCV 读取图像并使用整数值管理它们的像素(如 matlab)

python+opencv2怎么将图像像素值转换为float64用于后续计算