大家好,我正在尝试使用我的网络摄像头制作一个游戏,当我使用网络摄像头流式传输视频时,我需要一些物体从屏幕上掉下来(该流是我的背景)。
我正在使用 python 和 opencv 的模块 cv2
问题是:如何将蒙版应用于此对象?我已经有一个图像作为原始图像的蒙版,但我不知道如何应用它来减去原始图像的背景。
我已经尝试使用cv2.bitwise_and但没有任何反应,图像与黑色背景保持不变:
#targets
original_ball = cv2.imread("Aqua-Ball-Red-icon.png")
ball = cv2.resize(bola_original, (64,64), fx=1, fy=1)
#mask
mask_original = cv2.imread("input-mask.png",0)
mask = cv2.resize(mask_original, (64,64), fx=1, fy=1)
res = cv2.bitwise_and(ball, ball, mask = mask)
提前感谢!
如果您使用的是 cv2
,您正在使用numpy
数组,并且无需求助于 opencv 来获取像掩码这样简单的东西。
首先,操作(可能乘以)掩码数组,使您想要的值(即:未屏蔽的值)具有值 1。然后,将源图像乘以蒙版。这将使生成的图像具有蒙版 == 1 的原始像素和蒙版 == 0 的 0(即:黑色)。
这是它的要点:
import numpy
original_ball = cv2.imread("Aqua-Ball-Red-icon.png")
ball = cv2.resize(bola_original, (64,64), fx=1, fy=1)
mask_original = cv2.imread("input-mask.png",0)
mask = cv2.resize(mask_original, (64,64), fx=1, fy=1)
max_value= numpy.max(mask)
mask/=max_value
res= ball*mask
根据输入蒙版.png的颜色深度,您可能需要先将其缩小到灰度
由于掩码图像名称旁边的 0 参数,蒙版未出现)。