介绍
“当你不是魔术师但仍然可以用一些代码行魔法时”。
大家好 今天我们将通过在我们的代码编辑器中编写代码来实现魔术。
拥有一件哈利波特的隐形斗篷,可以去你想去的任何地方,体验隐形的感觉。
魔术师==编码器
所以,让我们用计算机视觉制作我们自己的隐形斗篷。
注意:所以如果你想做这个项目,在开始这个项目之前你需要知道一些事情。
你需要了解 Python 和 OpenCV 的基础知识,如果你不知道,请不要担心,我们将轻松涵盖所有内容,并且对初学者友好。
如果你想直接查看代码,那么这里是源代码 - https://github.com/puranjay123/Invisible-Cloak-openCV-
现在让我们开始项目,首先你需要选择你的斗篷,选择斗篷有一些条件。
快速浏览我们正在制作的内容:https://youtu.be/54osymwvY_o
斗篷的先决条件
只选择一种颜色的布,假设布的颜色是红色,然后确保你的背景不包含任何红色。因为如果背景包含该颜色,则会导致问题。
在这个项目中,我们使用红色的布,但你可以制作任何颜色,我们只需要更改颜色可见性的值,并且可以轻松更改。
现在选择布料后,我们需要为这个项目选择 IDE 并安装一些库来完成这项工作。
在这个项目中,我们使用 VS 代码来制作这个项目,但是你可以选择任何你想要的IDE,这取决于你。
现在我们需要在我们的设备上安装所有库,以便我们可以开始编码这个项目
我们的系统需要三样东西
Python 3.0.0 或以上版本
OpenCV
Numpy
源代码:https://github.com/puranjay123/Invisible-Cloak-openCV
要安装 OpenCV,请在终端中运行命令
pip install opencv-python
要安装 Numpy,请在终端上运行此命令
pip install numpy
对于为项目编写代码,最好有一个计划或算法,其中包含你计划做的所有事情。
算法:
首先导入我们可以用来制作项目的库。
使用网络摄像头捕捉人物和背景的实时画面。
我们必须捕捉背景,这样如果布料进来,它就会显示背景。
为我们选择的布料设置斗篷的值
制作 2 个蒙版并将它们应用到框架上。
组合蒙版并同时显示
显示最终输出
如果你没有获得算法,请不要担心,我们会慢慢了解它,并且实现起来会容易得多。
那么,现在让我们开始这个项目的实施。
第 1 步:导入库
# Import Libraries
import numpy as np
import cv2
import time
现在我们已经导入了库,我们现在必须在你的设备上使用摄像头才能工作。
因此,为了获取网络摄像头馈送,我们使用了默认网络摄像头使用的 VideoCapture 函数。
第 2 步:使用网络摄像头拍摄视频源
要使用网络摄像头,请输入 0 并用双引号输入视频路径。
cap = cv2.VideoCapture(0)
time.sleep(2)
background = 0
在 time 函数中,我们使用了该值,以便在运行程序后的前 2 秒内可以捕获视频。
第 3 步:捕捉背景
在前两秒内捕获背景图像。
for i in range(50):
ret, background = cap.read()
现在捕获视频并将其转换为 HSV 格式。
第 4 步:使用网络摄像头捕获视频源
while(cap.isOpened()):
ret, img = cap.read()
if not ret:
break
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
条件是当只有网络摄像头打开时,它才会运行,否则代码不会在没有网络摄像头的情况下运行。
我们必须获取红色布料的值以获取任何值并进行更改,直到红色开始从帧中消失。
第 5 步:设置斗篷和制作蒙版的值
#all this Comes in the while loop
lower_red = np.array([0,120,70])
upper_red = np.array([10,255,255]) # values is for red colour Cloth
mask1 = cv2.inRange(hsv, lower_red,upper_red)
lower_red = np.array([170,120,70])
upper_red = np.array([180,255,255])
mask2 = cv2.inRange(hsv,lower_red,upper_red)
#Combining the masks so that It can be viewd as in one frame
mask1 = mask1 +mask2
#After combining the mask we are storing the value in deafult mask.
现在在第 5 步中发生了很多事情,在这部分中,我们尝试设置布料的值,以便在运行程序时消除这些颜色,就像上面提到的布料是红色的一样,因此我们正在设置这块布的颜色,这样当我们制作蒙版时,它会简单地从屏幕上移除,而不是唯一的颜色,它显示了我们在步骤 3 中捕获的背景。
现在我们必须设置我们选择的布料颜色的值,这里我们选择红色的 RGB 格式,这样你就可以选择任何颜色的布料并更改这些值。
第 6 步:使用形态变换去除布料上的噪音和不必要的细节。
要深入了解形态学操作,你可以参考:https://docs.opencv.org/master/d9/d61/tutorial_py_morphological_ops.html
mask1 = cv2.morphologyEx(mask1,cv2.MORPH_OPEN,np.ones((3,3),np.uint8), iterations = 2)
mask1 = cv2.morphologyEx(mask1, cv2.MORPH_DILATE,np.ones((3,3),np.uint8), iterations = 1)
mask2 =cv2.bitwise_not(mask1)
Morhological transfromations - cv2.MORPH_CLOSE简单地删除不需要的不必要的细节,就像在这个项目中噪声是屏幕上出现的小黑洞
cv2.MORPH_OPEN将删除不需要的布料边界上的白色区域。
第 7 步:组合蒙版并在一帧中显示它们
res1 = cv2.bitwise_and(background,background,mask=mask1)
#The basic work of bitwise_and is to combine these background and store it in res1
res2 = cv2.bitwise_and(img,img,mask=mask2)
final_output = cv2.addWeighted(res1,1,res2,1,0)
cv2.imshow('Invisible Cloak',final_output)
k = cv2.waitKey(10)
if k==27:
break
cap.release()
cv2.destroyAllWindows()
# so if user want to quit the program they can press Escape key the 27 is the code for escape key in
#ASCII vode values
部署后的项目。
注意:在这个视频中,使用的布料是红色的,但你可以改变颜色的色调。
第 7 步是我们对存储在 res1 中的按位运算进行了操作,该操作用于组合我们制作的蒙版并将其存储在 res1 变量中。
我们使用了用于清晰图像的 cv2.addWeighted。
重要提示:当你尝试运行此功能时,需要2秒钟才能捕获我们在步骤2时间范围内选择的内容背景,所以尽量不要在前2秒内出现在画面中,然后你才可以简单地测试你的项目。
结论:在这个项目中,我们实施了简单的蒙版技术和形态学操作,将彩色布从框架中取出而显示出背景。
GitHub: https://github.com/puranjay123
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。
↓扫描二维码添加小编↓