【问题标题】:Create mask to select the black area创建蒙版以选择黑色区域
【发布时间】:2015-10-27 07:38:31
【问题描述】:

我的图像周围有一个黑色区域,我想使用 OpenCV C++ 创建一个遮罩,它只选择这个黑色区域,以便我以后可以绘制它。如何在不影响图像本身的情况下做到这一点?

我尝试将图像转换为灰度,然后使用阈值将其转换为二进制,但它会影响我的图像,因为结果包含图像内部的黑色像素。

另一个问题:如果我想裁剪图像而不是绘制它,我该怎么做??

提前致谢,

【问题讨论】:

  • 这个问题比你上一个关于该主题的问题要好/清楚得多!

标签: c++ opencv mask


【解决方案1】:

我会这样解决问题:

  1. 使用阈值 1 对图像进行反二值化(即所有值为 0 的像素都设置为 1,所有其他像素都设置为 0)
  2. 使用cv::findContours 查找白色段
  3. 删除不接触图像边框的片段
  4. 使用cv::drawContours 将剩余的线段绘制到蒙版中。

就运行时效率而言,可能有更高效的解决方案,但您应该能够很快地为我的解决方案制作原型。

【讨论】:

  • 感谢您的快速回复,如何删除不触及图像边框的片段?抱歉,我是这个领域的初学者。
  • 轮廓是点集。如果轮廓触及图像边界,则至少有一个点位于边界上。轮廓点的坐标由findContours 返回,检查每个点与边界很容易:x==0 || y == 0 || x == 宽度-1 || y == height-1(这里可能要加减1,我不记得findContours是怎么处理图片边框的了。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-24
  • 2019-07-23
  • 2019-12-16
  • 2010-10-12
  • 1970-01-01
  • 2014-07-10
  • 2015-07-09
相关资源
最近更新 更多