Python怎么使用opencv进行手势识别
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章将为大家详细讲解有关Python怎么使用opencv进行手势识别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。原理首先先进行手部的检测,找到之后会做Hand
千家信息网最后更新 2025年02月02日Python怎么使用opencv进行手势识别
这篇文章将为大家详细讲解有关Python怎么使用opencv进行手势识别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
原理
首先先进行手部的检测,找到之后会做Hand Landmarks。
将手掌的21个点找到,然后我们就可以通过手掌的21个点的坐标推测出来手势,或者在干什么。
程序部分
第一安装Opencv
pip install opencv-python
第二安装mediapipe
pip install mediapipe
程序
先调用这俩个函数库
import cv2import mediapipe as mp
然后再调用摄像头
cap = cv2.VideoCapture(0)
函数主体部分
while True: ret, img = cap.read()#读取当前数据 if ret: cv2.imshow('img',img)#显示当前读取到的画面 if cv2.waitKey(1) == ord('q'):#按q键退出程序 break
全部函数
import cv2import mediapipe as mpimport timecap = cv2.VideoCapture(1)mpHands = mp.solutions.handshands = mpHands.Hands()mpDraw = mp.solutions.drawing_utilshandLmsStyle = mpDraw.DrawingSpec(color=(0, 0, 255), thickness=3)handConStyle = mpDraw.DrawingSpec(color=(0, 255, 0), thickness=5)pTime = 0cTime = 0while True: ret, img = cap.read() if ret: imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) result = hands.process(imgRGB) # print(result.multi_hand_landmarks) imgHeight = img.shape[0] imgWidth = img.shape[1] if result.multi_hand_landmarks: for handLms in result.multi_hand_landmarks: mpDraw.draw_landmarks(img, handLms, mpHands.HAND_CONNECTIONS, handLmsStyle, handConStyle) for i, lm in enumerate(handLms.landmark): xPos = int(lm.x * imgWidth) yPos = int(lm.y * imgHeight) # cv2.putText(img, str(i), (xPos-25, yPos+5), cv2.FONT_HERSHEY_SIMPLEX, 0.4, (0, 0, 255), 2) # if i == 4: # cv2.circle(img, (xPos, yPos), 20, (166, 56, 56), cv2.FILLED) # print(i, xPos, yPos) cTime = time.time() fps = 1/(cTime-pTime) pTime = cTime cv2.putText(img, f"FPS : {int(fps)}", (30, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 3) cv2.imshow('img', img) if cv2.waitKey(1) == ord('q'): break
这样我们就能再电脑上显示我们的手部关键点和坐标了,对于手势识别或者别的操作就可以通过获取到的关键点的坐标进行判断了。
附另一个手势识别实例
'''@Time : 2021/2/6 15:41 @Author : WGS@remarks : '''""" 从视频读取帧保存为图片"""import cv2import numpy as np# cap = cv2.VideoCapture("C:/Users/lenovo/Videos/wgs.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) & 0xFF if key == ord('q'): breakcap.release()cv2.destroyAllWindows()
关于"Python怎么使用opencv进行手势识别"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
手势
轮廓
坐标
检测
函数
程序
篇文章
关键
关键点
区域
可以通过
手掌
手部
摄像头
更多
电脑
部分
面积
处理
摄像
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
db2数据库数据导入
多维度提高网络安全等级
服务器ip被运营商拦截了
上海品牌网络技术来电咨询
数据库服务器怎么使用
数据库表设计英文
互联网 下科技公司
松江区海航数据库服务商价钱
恋恋视频软件开发
大学数据库系统教程习题答案
通信企业网络安全人员能力认证
九台区正规网络技术服务有哪些
万家网络技术有限公司怎么样
网络安全对各方面的影响
java服务器引入地图
成都数据库招商
招远数据库恢复
学软件开发技术需要啥条件
驱动软件开发培训
我对网络技术的了解
网络安全防护技术工作计划
如何固定服务器电脑ip
宜章软件开发工程师学费多少
重庆工业软件开发怎么样
苏州信息网络技术
pg数据库垂直分表
网络技术专业技能作文
社区网络安全防范措施
帝国神话服务器要买吗
烽火服务器怎么挂载镜像