Python怎么实现手势识别
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章主要讲解了"Python怎么实现手势识别",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Python怎么实现手势识别"吧!获取视频(摄像头)这部
千家信息网最后更新 2025年12月03日Python怎么实现手势识别
这篇文章主要讲解了"Python怎么实现手势识别",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Python怎么实现手势识别"吧!
获取视频(摄像头)
这部分没啥说的,就是获取摄像头。
cap = cv2.VideoCapture("C:/Users/lenovo/Videos/1.mp4")#读取文件#cap = cv2.VideoCapture(0)#读取摄像头while(True):ret, frame = cap.read() key = cv2.waitKey(50) & 0xFFif key == ord('q'):breakcap.release()cv2.destroyAllWindows()
肤色检测
这里使用的是椭圆肤色检测模型
在RGB空间里人脸的肤色受亮度影响相当大,所以肤色点很难从非肤色点中分离出来,也就是说在此空间经过处理后,肤色点是离散的点,中间嵌有很多非肤色,这为肤色区域标定(人脸标定、眼睛等)带来了难题。如果把RGB转为YCrCb空间的话,可以忽略Y(亮度)的影响,因为该空间受亮度影响很小,肤色会产生很好的类聚。这样就把三维的空间将为二维的CrCb,肤色点会形成一定得形状,如:人脸的话会看到一个人脸的区域,手臂的话会看到一条手臂的形态。
def A(img):YCrCb = cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB) #转换至YCrCb空间(y,cr,cb) = cv2.split(YCrCb) #拆分出Y,Cr,Cb值cr1 = cv2.GaussianBlur(cr, (5,5), 0)_, skin = cv2.threshold(cr1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) #Ostu处理res = cv2.bitwise_and(img,img, mask = skin)return res
轮廓处理
轮廓处理的话主要用到两个函数,cv2.findContours和cv2.drawContours,这两个函数的使用使用方法很容易搜到就不说了,这部分主要的问题是提取到的轮廓有很多个,但是我们只需要手的轮廓,所以我们要用sorted函数找到最大的轮廓。
def B(img):#binaryimg = cv2.Canny(Laplacian, 50, 200) #二值化,canny检测h = cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) #寻找轮廓contour = h[0]contour = sorted(contour, key = cv2.contourArea, reverse=True)#已轮廓区域面积进行排序#contourmax = contour[0][:, 0, :]#保留区域面积最大的轮廓点坐标bg = np.ones(dst.shape, np.uint8) *255#创建白色幕布ret = cv2.drawContours(bg,contour[0],-1,(0,0,0),3) #绘制黑色轮廓return ret
全部代码
""" 从视频读取帧保存为图片"""import cv2import numpy as npcap = cv2.VideoCapture("C:/Users/lenovo/Videos/1.mp4")#读取文件#cap = cv2.VideoCapture(0)#读取摄像头#皮肤检测def A(img):YCrCb = cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB) #转换至YCrCb空间(y,cr,cb) = cv2.split(YCrCb) #拆分出Y,Cr,Cb值cr1 = cv2.GaussianBlur(cr, (5,5), 0)_, skin = cv2.threshold(cr1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) #Ostu处理res = cv2.bitwise_and(img,img, mask = skin)return resdef B(img):#binaryimg = cv2.Canny(Laplacian, 50, 200) #二值化,canny检测h = cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) #寻找轮廓contour = h[0]contour = sorted(contour, key = cv2.contourArea, reverse=True)#已轮廓区域面积进行排序#contourmax = contour[0][:, 0, :]#保留区域面积最大的轮廓点坐标bg = np.ones(dst.shape, np.uint8) *255#创建白色幕布ret = cv2.drawContours(bg,contour[0],-1,(0,0,0),3) #绘制黑色轮廓return retwhile(True):ret, frame = cap.read()#下面三行可以根据自己的电脑进行调节src = cv2.resize(frame,(400,350), interpolation=cv2.INTER_CUBIC)#窗口大小cv2.rectangle(src, (90, 60), (300, 300 ), (0, 255, 0))#框出截取位置roi = src[60:300 , 90:300] # 获取手势框图res = A(roi) # 进行肤色检测cv2.imshow("0",roi)gray = cv2.cvtColor(res, cv2.COLOR_BGR2GRAY)dst = cv2.Laplacian(gray, cv2.CV_16S, ksize = 3)Laplacian = cv2.convertScaleAbs(dst)contour = B(Laplacian)#轮廓处理cv2.imshow("2",contour)key = cv2.waitKey(50) & 0xFFif key == ord('q'):breakcap.release()cv2.destroyAllWindows()
感谢各位的阅读,以上就是"Python怎么实现手势识别"的内容了,经过本文的学习后,相信大家对Python怎么实现手势识别这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
轮廓
肤色
空间
区域
处理
检测
手势
摄像头
面积
摄像
最大
亮度
人脸
函数
学习
影响
两个
内容
坐标
就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
华工科技公司是工业互联网吗
软件开发策划合同
网络安全教育主题图片
湖南多功能软件开发成本价
能实现数据库的软件
中科院网络技术中心
软件开发的一些电子
软件开发项目进展情况
数据库图像识别教程
今日头条软件开发资金
数据库打破国外垄断
计算机网络服务器无法下载软件
阿里服务器租用
数据库导入的表格无效
新疆公安厅网络安全保卫总队
法国网络技术
国家网络安全宣传案例
注册个体户网络技术中心
育碧服务器崩了还能玩游戏吗
1) 数据库技术
网络安全证书文案
捏脸数据库天刀手游
人社系统网络安全培训
同花顺如何接入证券公司服务器
什么叫标准数据库
TBC怀旧服热门服务器
打不开帐套管理和加密服务器
教程三级网络技术课后答案
数据库写寿命
服务器磁盘使用什么方式安全