【问题标题】:OpenCV Histogram MaskOpenCV 直方图掩码
【发布时间】:2018-03-25 11:38:06
【问题描述】:

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

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

我做得对吗?

【问题讨论】:

  • 您对口罩的一般理解是正确的。如果您尝试做的是计算所有值小于 220 的像素的直方图,那么您的方法将是正确的。

标签: c# image opencv image-processing


【解决方案1】:

如果您想计算每个通道上像素值小于 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, 255)之类的值来掩盖像素,这些值不是白色的。它会发生,因为cv::inRange 中的逻辑是 AND。
  • 这正是代码所做的。他提到他正在寻找白色像素,因此我们必须先找到它们,但他希望它们被遮罩,因此我们反转先前建立的遮罩。看这张图片:photos.app.goo.gl/dNLz8pdeIa4fkK5B2 通过使用(0-220,0-220,0-220) 绑定:photos.app.goo.gl/HvNkQ0XfynRnzsIv2
  • 我现在明白了,感谢您抽出宝贵的时间 --- 没有意识到 OP 想要一个倒置的面具。我会删除我的 cmets。
猜你喜欢
  • 2014-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多