2017-10-13 111 views
0

我想计算图像的直方图。 我必须使用面具。我的面具应该看起来像黑白图像? 黑色忽略空间,白色来计算?OpenCV直方图蒙版

创建蒙版。我将白色像素(R> 220 & G> 220 & B> 220)替换为黑色,其他替换为白色。

我在做对吧?

+1

你对面具的一般理解是正确的。如果你要做的是计算值小于220的所有像素的直方图,那么你的方法是正确的。 –

回答

2

如果您想要计算每个通道上像素值小于220的图像部分的直方图,那么您的解决方法是正确的。 也要小心不要更换原始图像上的像素。只需制作一个单通道cv::Mat,其高度和宽度与原始图像相同。然后,根据原始图像填充它的像素。 你也可以使用cv::inRange功能来制作这样的面具:

cv::MAT mask; 
// make inverted mask in order to avoid masking pure red, green or blue 
cv::inRange(original_image, cv::Scalar(220, 220, 220), cv::Scalar(255, 255, 255), mask); 
// make non-inverted mask 
mask = 255 - mask; 
+0

如果你用这种方式编码,你可能用像'(0,0,255) ',这不是白色的。它会发生,因为'cv :: inRange'中的逻辑是AND。 – Soroush

+0

这正是代码所做的。他提到他正在寻找白色像素,因此我们必须首先找到它们,但他希望它们被遮挡,因此我们反转了以前创建的遮罩。 看这张图片: https://photos.app.goo.gl/dNLz8pdeIa4fkK5B2 通过使用'(0-220,0-220,0-220)'绑定: https://photos.app.goo .gl/HvNkQ0XfynRnzsIv2 – Soroush

+0

我现在看到了,感谢您抽出时间---没有意识到OP想要一个倒置的面具。我会删除我的评论。 –