Python怎么使用opencv进行手势识别
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章将为大家详细讲解有关Python怎么使用opencv进行手势识别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。原理首先先进行手部的检测,找到之后会做Hand
千家信息网最后更新 2025年11月08日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安全错误
数据库的锁怎样保障安全
冬奥会网络安全取得成效
查看数据库所有链接
网络安全的手抄报图片3年级
抱一网络技术有限公司
网络安全资产三大特征
网络安全法爬虫
网络安全应对措施和态势
webmin数据库乱码
护苗网络安全知识答题
dayz进同一个服务器
做软件开发客户常见的问题
前端软件开发工程师简历
网络安全勘察
网络安全主题班会一年级
蓝星专利数据库
批量excel导入数据库
数据库技术及应用大纲
计算机网络技术考试题c卷
银行网络安全职责
建筑业网络安全技术交底
广州工行软件开发中心岗位
网络安全威胁国家经济
计算机网络技术可以报考的
数飞网络技术北京
标准数据库
db2数据库序列号重置
网络安全风险专项治理报告
软件开发需求一览表
网络安全课程设计rc4
健身房器材管理系统数据库