创建一个遮罩并在opencv python中删除内部轮廓

时间:2018-08-27 16:39:34

标签: python opencv mask contour

这是我从代码中得到的结果: enter image description here

我已使用轮廓在面部上制作了此蒙版,如代码中所示。
该项目的最终结果是删除该面孔并显示背景我尚未定义
我的问题是:有什么办法可以用此计数器制作遮罩,以便我可以使用类似from bs4 import BeautifulSoup 的东西在背景遮罩下显示前景吗? (这里的问题是我必须以这种形式将面具作为视频,但我希望它是实时的
或者也许是另一种方式,我可以以某种方式删除计数器中(或下方)的帧像素吗?
这是我的代码:

cv2.imshow('My Image',cmb(foreground,background,mask))

2 个答案:

答案 0 :(得分:1)

假设您的掩码是二进制掩码,则可以执行以下操作:

def cmb(foreground,background,mask):
    result = background.copy()
    result[mask] = foreground[mask]
    return result

我没有测试此代码,但我希望这个想法能够解决。您将背景遮罩反转,而将前景遮罩保留下来。您将其应用到每个帧和蒙版上,就得到了蒙版图像。

编辑: 根据评论调整代码。当然,该解决方案比我最初写的要清晰得多。但是,功能保持不变。

答案 1 :(得分:0)

这是我从帧中删除人脸的解决方案(速度更快,但再次感谢@meetaig的帮助)

mask = np.zeros(frame.shape,dtype='uint8')
mask = cv2.drawContours(mask, [facelineHull], -1, (255 , 255 , 255),thickness=cv2.FILLED)
mask = cv2.bitwise_not(mask)
img2gray = cv2.cvtColor(mask,cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
result= cv2.bitwise_and(frame,frame,mask=mask)

如果我现在显示结果,它将起作用。

cv2.imshow("Frame", result)