• 发文
  • 评论
  • 微博
  • 空间
  • 微信

在 Python 中使用计算机视觉实现哈利波特的隐形斗篷

磐创AI 2021-09-10 15:30 发文

介绍

“当你不是魔术师但仍然可以用一些代码行魔法时”。

大家好 今天我们将通过在我们的代码编辑器中编写代码来实现魔术。

拥有一件哈利波特的隐形斗篷,可以去你想去的任何地方,体验隐形的感觉。

魔术师==编码器

所以,让我们用计算机视觉制作我们自己的隐形斗篷。

注意:所以如果你想做这个项目,在开始这个项目之前你需要知道一些事情。

你需要了解 Python 和 OpenCV 的基础知识,如果你不知道,请不要担心,我们将轻松涵盖所有内容,并且对初学者友好。

如果你想直接查看代码,那么这里是源代码 - https://github.com/puranjay123/Invisible-Cloak-openCV-

现在让我们开始项目,首先你需要选择你的斗篷,选择斗篷有一些条件。

快速浏览我们正在制作的内容:https://youtu.be/54osymwvY_o

斗篷的先决条件只选择一种颜色的布,假设布的颜色是红色,然后确保你的背景不包含任何红色。因为如果背景包含该颜色,则会导致问题。在这个项目中,我们使用红色的布,但你可以制作任何颜色,我们只需要更改颜色可见性的值,并且可以轻松更改。

现在选择布料后,我们需要为这个项目选择 IDE 并安装一些库来完成这项工作。

在这个项目中,我们使用 VS 代码来制作这个项目,但是你可以选择任何你想要的IDE,这取决于你。

现在我们需要在我们的设备上安装所有库,以便我们可以开始编码这个项目

我们的系统需要三样东西

Python 3.0.0 或以上版本OpenCVNumpy

源代码: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

声明:本文为OFweek维科号作者发布,不代表OFweek维科号立场。如有侵权或其他问题,请及时联系我们举报。
2
评论

评论

    相关阅读

    暂无数据

    磐创AI

    人工智能前沿技术分享。...

    举报文章问题

    ×
    • 营销广告
    • 重复、旧闻
    • 格式问题
    • 低俗
    • 标题夸张
    • 与事实不符
    • 疑似抄袭
    • 我有话要说
    确定 取消

    举报评论问题

    ×
    • 淫秽色情
    • 营销广告
    • 恶意攻击谩骂
    • 我要吐槽
    确定 取消

    用户登录×

    请输入用户名/手机/邮箱

    请输入密码