1 说明
=====
1.1 孙悟空可以实现人的隐身和消失。
1.2 今天,我们用python-opencv实现摄像头视频中人的消失,就是隐身术。

2 效果展示

3 分析
=====
3.1 注意掩膜与实时背景的色彩,可以微调,主要是便于观察和展示。
3.2 目前适用于固定摄像头背景的隐身,如果是视频,比如mp4的隐身,可能在获取背景上需要下很大功夫,暂时提供思维。
3.3 源代码来自:其中的InvisibilityCloak文件夹的InvisibilityCloak.py文件进行修改、注释、删减和调试等等操作。
https://github.com/spmallick/learnopencv3.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 HSVhsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) #3-4:掩膜#技术要点#下面的数据是针对用红色布进行隐身# Generating mask to detect red colorlower_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 outputfinal_output = cv2.addWeighted(res1,1,res2,1,0) #窗口视频展示cv2.imshow('Magic !!!',final_output)
5 操作步骤
========
5.1 打开摄像头。
5.2 打开代码,微软编辑器,首先人不要对着摄像头,偏离,点击运行按钮,获取摄像头固定静态背景图。
5.3 出现展示框,代表摄像头实时视频,人然后出现摄像头内,只要出现一点红色的布,就可以产生大约300和300的隐身范围。我用的是小学生的红领巾。
5.4 本人已经亲测,可行!
分享出来,超级强和经典。
本文介绍如何使用Python和OpenCV库实现在摄像头视频中人物的‘隐身’效果。通过调整HSV色彩范围,实现特定颜色(如红领巾)在视频中的消失,适用于固定摄像头背景。详细代码解析和操作步骤帮助读者快速理解和实现。

390

被折叠的 条评论
为什么被折叠?



