如何将图像的蒙版部分叠加到新图像上?

时间:2019-05-16 07:37:42

标签: python python-3.x opencv image-processing

对于这个基本问题,我真的感到很抱歉,但是我对OpenCV和图像处理一般还是陌生的,经过一段时间的摸索,仍无法解决。

这就是我想要做的:

我有一个透明的PNG图片:

Original image

我为此创建了一个二进制掩码,透明区域为黑色,对象为白色:

Binary mask

现在,我有另一幅这样的图像,具有相同的尺寸:

Patterned image

现在,我希望将第一个图像(实际对象)的白色蒙版部分叠加到该图像上。我该怎么做?

2 个答案:

答案 0 :(得分:2)

利用这里有numpy数组的事实,我们可以首先将蒙版扩展到三个维度:

mask = np.dstack([(mask > 0)]*3) # original mask is cv 255 mask
mask = np.dstack([mask]*3) # original mask is already boolean

然后使用遮罩复制图像:

np.copyto(background, foreground, where=mask)

答案 1 :(得分:2)

这是一种实现方式:

import cv2

# Load images
bg     = cv2.imread('bg.png')                                                                 
object = cv2.imread('object.png')                                                         
mask   = cv2.imread('mask.png')                                                             

# Zero background where we want to overlay
bg[mask>0]=0                                                                              

# Add object to zeroed out space
bg += object*(mask>0)                                                                     

cv2.imwrite('result.png',bg)  

enter image description here