目 录
一、准备工作:
opencv库和PyQt5库
一张背景图和同一背景人举着红布的图
二、大致思路
要实现的效果如下:
图片隐身思路:
背景图
手持红布图
(1)先将手持红布图片格式转化为方便操作的hsv格式
(2)用背景图扣出纯色板。
(3)再根据掩膜取反,用红布背景扣出除了红布外的背景。
(4)将两张图片像素做与运算,即两张照片拼在一起
摄像头实时隐身思路:
(1)打开摄像头,然后最先读取到的图片充当背景。
(2)后面人进入摄像头范围手举着红布(红色物体),代入刚刚的图片隐身思路。
使用Qt组件:
(1)将视频放入窗口。
(2)通过按钮控制实时隐身视频。
人脸识别那篇文章详细讲解了所需的组件,此处不再赘述。
三、代码实现
1、小试牛刀
先读取一张有红色背景的图片
import cv2 as cv
image = cv.imread("image.jpg") # 读取图片
cv.imshow("image", image) # 展示图片
cv.waitKey(0) # 参数0为等待用户操作
运行结果如下:
将图片改为hsv格式
imgHSV = cv.cvtColor(image, cv.COLOR_BGR2HSV) # 改为hsv格式
运行结果如下:
利用这个hsv颜色空间扣出红色背景图,发现红色有两栏,那我们分别扣出两栏,再直接相加:
mask1 = cv.inRange(imgHSV, (0, 43, 46), (10, 255, 255))
mask2 = cv.inRange(imgHSV, (156, 43, 46), (180, 255, 255))
mask = mask1 + mask2
运行结果如下: