使用OpenCV Python,如何使所有黑色像素透明,并覆盖在原始图像上

15

我尝试制作一个白色的彩色遮罩。 我的想法是:

  • 在遮罩中使黑色像素透明
  • 合并两个图像
  • 裁剪图像

这样,我的原始遮罩区域将是白色的。 我需要哪些OpenCV Python代码/方法?

类似这样:

原始图片

Original

遮罩

Mask

期望结果(模拟-没有绿边)

Desired result (mocked up - no green edges)

而不是

Instead of


你能发一下你是如何获取掩码的吗? - IronManMark20
2个回答

2
我假设你的掩码是一个布尔类型的numpy数组,而你的两幅图像分别是numpy数组image1和image2。
然后,你可以使用布尔数组作为乘数。
overlay= mask*image1 + (-mask)*image2

所以,您从图像1获取“真实”像素,从图像2获取“错误”像素。

2
我应该进行颜色阈值处理来获取掩模本身。 在第一次快速而粗略的尝试中,使用色相43-81、饱和度39-197和亮度115-255,得到的结果如下: enter image description here 下一步是整个填充算法,用于填充掩模内部。注意,也选择了右侧的一个小区域。

enter image description here

下一步是将两个结果相减(掩模填充_掩模填充后):

enter image description here

再次使用二值开运算填充空洞并消除噪点:

enter image description here

使用创建的遮罩层对图像进行遮罩。

enter image description here

每一步都可以调整以获得最佳结果。一个好主意是尝试使用步骤(例如使用ImageJ)来设置您的工作流程,然后在Python / OpenCV中编写脚本。
还可以参考http://fiji.sc/Segmentation

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接