opencv/python:在摄像头视频流中使用cv2掩码
大家好,我正在用我的摄像头制作一个游戏,想让一些物体从屏幕上掉下来,同时我还在用摄像头直播视频(这个视频是我的背景)。
我使用的是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)
提前谢谢大家!
2 个回答
1
面具没有显示出来,是因为在面具图片名字旁边有个0这个参数。
1
如果你在使用 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
根据你的 input-mask.png 的颜色深度,你可能需要先把它转换成灰度图。