强!隐身术:python-opencv实现视频中人的消失

1 说明
=====
1.1 孙悟空可以实现人的隐身和消失 。
1.2 今天 , 我们用python-opencv实现摄像头视频中人的消失 , 就是隐身术 。
强!隐身术:python-opencv实现视频中人的消失文章插图
2 效果展示
强!隐身术:python-opencv实现视频中人的消失文章插图
3 分析
=====
3.1 注意掩膜与实时背景的色彩 , 可以微调 , 主要是便于观察和展示 。
3.2 目前适用于固定摄像头背景的隐身 , 如果是视频 , 比如mp4的隐身 , 可能在获取背景上需要下很大功夫 , 暂时提供思维 。
3.3 源代码来自:其中的InvisibilityCloak文件夹的InvisibilityCloak.py文件进行修改、注释、删减和调试等等操作 。
3.4 讲解清楚 , 注释仔细 , 运行成功 , 小白秒懂 , 适合收藏 , 经典 。
3.5 环境:python3.8+opencv4.4.0+深度deepin-linux操作系统+微软编辑器vscode 。
4 我修改后的代码讲解InvisibilityCloak.py
==============================
4.1 头注释部分 , 可以只是看看
#摄像头隐身术#第一步:固定摄像头位置 , 获取背景#第二步:人出现在摄像头内#第三步:一部分红色类物体 , 及放大后起到隐身人的作用#位操作==按位运算#包括按位操作有:AND,OR,NOT,XOR等 。 提取图片一部分的时候会很有用 。 #比如有要将一个logo的中间部分挖掉放到另一个图里 , 使用简单的ROI操作是办不到的 。 #bitwise_not是对二进制数据进行“非”操作 , #即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“非”操作 , ~1=0 , ~0=1 '''参数cv2.morphologyEx(src, op, kernel) 进行各类形态学的变化参数说明:src传入的图片 , op进行变化的方式 ,kernel表示方框的大小op =cv2.MORPH_OPEN 进行开运算 , 指的是先进行腐蚀操作 , 再进行膨胀操作op = cv2.MORPH_CLOSE 进行闭运算 ,指的是先进行膨胀操作 , 再进行腐蚀操作开运算:表示的是先进行腐蚀 , 再进行膨胀操作闭运算:表示先进行膨胀操作 , 再进行腐蚀操作'''4.2
#第1步:导入模块import cv2import numpy as np4.3
#第2步:初始化#图像摄入cap = cv2.VideoCapture(0)#来自摄像头#参数初始化count = 0background=0# Capturing and storing the static background frame#背景图读取和存储 , 人先不要出现60秒for i in range(60): ret,background = cap.read()4.4
#第3步:循环while(cap.isOpened()): #3-1:获取摄像头实时的图片 #第一个参数ret 为True 或者False,代表有没有读取到图片#第二个参数frame(img)表示截取到一帧的图片 ret, img = cap.read()#3-2:退出设置 #如果没有读取到图片 if not ret:#退出break#退出设置 k = cv2.waitKey(10) if k == 27:break#3-3:读取图片和颜色转换 #计数 count+=1 #图像左右互换 #img = np.flip(img,axis=1)#背景转换 # Converting the color space from BGR to HSV hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)#3-4:掩膜 #技术要点 #下面的数据是针对用红色布进行隐身 # Generating mask to detect red color lower_red = np.array([0,120,70]) upper_red = np.array([10,255,255]) 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)mask1 = mask1+mask2 # Refining the mask corresponding to the detected red color #开运算:表示的是先进行腐蚀 , 再进行膨胀操作 mask1 = cv2.morphologyEx(mask1, cv2.MORPH_OPEN, np.ones((3,3),np.uint8),iterations=2)#进行膨胀操作 #原来是3和3 #300和300是隐身范围大小 , 推荐 mask1 = cv2.dilate(mask1,np.ones((300,300),np.uint8),iterations = 1) #位操作==按位运算#bitwise_not是对二进制数据进行“非”操作 mask2 = cv2.bitwise_not(mask1) #是对二进制数据进行“和”操作 res1 = cv2.bitwise_and(background,background,mask=mask1) res2 = cv2.bitwise_and(img,img,mask=mask2)#3-5:Generating the final output final_output = cv2.addWeighted(res1,1,res2,1,0)#窗口视频展示 cv2.imshow('Magic !!!',final_output)
强!隐身术:python-opencv实现视频中人的消失文章插图
5 操作步骤
========
5.1 打开摄像头 。
5.2 打开代码 , 微软编辑器 , 首先人不要对着摄像头 , 偏离 , 点击运行按钮 , 获取摄像头固定静态背景图 。
5.3 出现展示框 , 代表摄像头实时视频 , 人然后出现摄像头内 , 只要出现一点红色的布 , 就可以产生大约300和300的隐身范围 。 我用的是小学生的红领巾 。
5.4 本人已经亲测 , 可行!
【强!隐身术:python-opencv实现视频中人的消失】分享出来 , 超级强和经典 。