Python怎么实现手势识别
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要讲解了"Python怎么实现手势识别",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Python怎么实现手势识别"吧!获取视频(摄像头)这部
千家信息网最后更新 2025年02月01日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) & 0xFF
if key == ord('q'):
break
cap.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 cv2
import numpy as np
cap = 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 res
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
while(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) & 0xFF
if key == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
感谢各位的阅读,以上就是"Python怎么实现手势识别"的内容了,经过本文的学习后,相信大家对Python怎么实现手势识别这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
轮廓
肤色
空间
区域
处理
检测
手势
摄像头
面积
摄像
最大
亮度
人脸
函数
学习
影响
两个
内容
坐标
就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
遨游网络安全教育
魔域服务器未启动
网络安全设备日志怎么看
敏捷软件开发 百度网盘
LUM数据库考试前一天
网络安全管理和维护工作总结
公安网络安全情况汇报
mdb数据库的版权
江苏质量软件开发现价
建筑业网络技术
聚橙网网络技术
图书名字数据库
增强学生网络安全意识
开黑啦服务器连接
思晨网络技术服务有限公司
传奇中的单机服务器
智能软件开发都有哪些
买的服务器主机怎么做网站
软件开发公司的销售渠道
江北敏捷软件开发企业
小麦植物数据库
中美部长级会谈网络安全
平台管理服务器代替nvr
鸿蒙系统升级连接服务器失败
网络安全课程设计哈希函数
软件开发的图片素材
网络安全工程师需要什么
万有引力网络技术有限公司
软件开发业务语句
怎么删除数据库中的行