简体   繁体   English

OpenCV Python-用背景色替换遮罩

[英]OpenCV Python - replace the mask with the background color

I want to remove the mask from the image and replace it with the background color. 我想从图像中删除蒙版,并用背景色替换它。 as in this case, i want to remove Cristiano's face from the original image 在这种情况下,我想从原始图像中删除克里斯蒂亚诺的脸

this is the original image 这是原始图像
在此处输入图片说明

this is the mask 这是面具
在此处输入图片说明

this is the code I am using now 这是我现在使用的代码

# load background (could be an image too)
bk = np.full(frame.shape, 255, dtype=np.uint8)  # white bk


# blur the mask to help remove noise, then apply the
# mask to the frame
skinMask = cv2.GaussianBlur(skinMask, (3, 3), 0)



#skinMask = cv2.bitwise_not(skinMask)
skin = cv2.bitwise_and(frame, frame, mask = skinMask)

cv2.imshow("mask", skin)

mask = cv2.bitwise_not(skinMask)
bk_masked = cv2.bitwise_and(bk, bk, mask=mask)

# combine masked foreground and masked background 
final = cv2.bitwise_or(bk_masked,skin)

I am not sure exactly what the shape of your mask is, but the swapping operation should be quite straight forward. 我不确定面具的形状是什么,但是交换操作应该很简单。

# Assuming frame is of shape (531, 403, 3)
# And skinMask is of shape (527, 401, 3)
# Which is what it is when you do an cv2.imread on your posted images

# First find all the coordinates you want to swap
faceCoords = np.where(skinMask != [0,0,0])  # 0,0,0 is black

# Then swap the values from your bk image like so
frame[faceCoords[0],faceCoords[1],faceCoords[2]] = bk[faceCoords[0],faceCoords[1],faceCoords[2]]

This should generate an image, with the background value replacing the positive part of the mask values. 这将生成一个图像,背景值将替换蒙版值的正部分。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM