OpenCV 是一个基于 Apache2.0 许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。
需要提前准备opencv 和 mediapipe库
pip --default-timeout=5000 install -i https://pypi.tuna.tsinghua.edu.cn/simple mediapipe
先看看效果,这个当然只是入门的小案例,后续博主会持续更新手势识别的实战项目
下面附上代码和讲解内容:
-
导入模块:首先,使用
import
语句导入所需的Python模块。代码中导入了cv2
(OpenCV),numpy
,mediapipe
以及time
模块。 -
打开摄像头:通过
cv2.VideoCapture(0)
打开计算机上连接的摄像头,并创建一个视频捕获对象cap
。 -
初始化Mediapipe的手部检测和绘制模块:使用
mp.solutions.hands
创建一个手部检测对象hands
,以及使用mp.solutions.drawing_utils
创建一个绘制工具对象mpDraw
。 -
进入循环:通过
while True
,进入一个无限循环,用于不断从摄像头中读取图像帧,并进行手部检测和绘制。 -
读取图像帧:使用
cap.read()
读取一帧图像,并将结果保存在success
和img
变量中。 -
转换颜色空间:使用
cv2.cvtColor()
将图像的颜色空间从BGR转换为RGB,因为Mediapipe使用RGB格式。 -
执行手部检测:通过
hands.process()
对RGB图像进行手部检测,将结果保存在resuits
变量中。 -
绘制关键点和连接线:如果检测到了手部,通过
for
循环遍历每个检测到的手,并使用mpDraw.draw_landmarks()
将关键点和连接线绘制在图像上。 -
显示图像:通过
cv2.imshow()
显示带有绘制结果的图像。 -
等待按键:通过
cv2.waitKey(1)
等待1毫秒,检测是否有按键输入。这样可以在每帧图像上进行绘制,并允许用户在图像窗口中关闭显示。
上代码
import cv2
import numpy as np
import mediapipe as mp
import time
cap = cv2.VideoCapture(0)
mpHands = mp.solutions.hands
hands = mpHands.Hands()
mpDraw = mp.solutions.drawing_utils
while True:
success , img = cap.read()
imgRGB = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
resuits = hands.process(imgRGB)
# print(resuits.multi_hand_landmarks)
if resuits.multi_hand_landmarks:
for handLms in resuits.multi_hand_landmarks:
mpDraw.draw_landmarks(img,handLms,mpHands.HAND_CONNECTIONS)
cv2.imshow("Image",img)
cv2.waitKey(1)
谢谢阅读,喜欢的点个赞哦!