📅  最后修改于: 2023-12-03 15:38:56.273000             🧑  作者: Mango
本文介绍使用Python和OpenCV、Mediapipe等库来实现手部追踪的方法。
本项目需要安装以下依赖库:
使用pip命令来安装这些库:
pip install opencv-python mediapipe
本项目需要使用摄像头来进行手部追踪。使用OpenCV库中的VideoCapture
类来打开摄像头:
import cv2
# 打开摄像头
cap = cv2.VideoCapture(0)
其中参数为0表示打开默认的摄像头。如果需要使用其他摄像头,可以改为对应的编号,例如1、2等。
使用VideoCapture
类的read()
方法来读取视频流中的帧。每一帧都是一个图像,可以使用OpenCV库中的imshow()
函数来显示。
# 读取一帧
ret, frame = cap.read()
# 显示图像
cv2.imshow('frame', frame)
接下来,我们需要使用Mediapipe库的Hand
类来解析图像中的手部信息。Hand
类会返回一个手部的21个关键点的坐标。
import mediapipe as mp
# 创建手部检测类
hands = mp.solutions.hands.Hands()
# 解析图像,获取手部信息
results = hands.process(frame)
我们可以使用OpenCV库的circle()
函数来绘制关键点。
# 遍历每个手部关键点,绘制圆点
for hand_landmarks in results.multi_hand_landmarks:
for landmark in hand_landmarks.landmark:
x, y = int(landmark.x * frame.shape[1]), int(landmark.y * frame.shape[0])
cv2.circle(frame, (x, y), 5, (0, 0, 255), -1)
最后,我们使用OpenCV库的imshow()
函数来显示帧。另外,我们还需要使用waitKey()
函数来等待用户按下键盘上的某个键才会继续执行下一帧。
# 显示结果
cv2.imshow('Hand tracking', frame)
# 等待用户按下键盘上的一个键
cv2.waitKey(1)
完整示例代码:
import cv2
import mediapipe as mp
# 打开摄像头
cap = cv2.VideoCapture(0)
# 创建手部检测类
hands = mp.solutions.hands.Hands()
while True:
# 读取一帧
ret, frame = cap.read()
# 解析图像,获取手部信息
results = hands.process(frame)
# 遍历每个手部关键点,绘制圆点
for hand_landmarks in results.multi_hand_landmarks:
for landmark in hand_landmarks.landmark:
x, y = int(landmark.x * frame.shape[1]), int(landmark.y * frame.shape[0])
cv2.circle(frame, (x, y), 5, (0, 0, 255), -1)
# 显示结果
cv2.imshow('Hand tracking', frame)
# 等待用户按下键盘上的一个键
cv2.waitKey(1)
通过本文的介绍,我们学习了如何使用Python和OpenCV、Mediapipe等库来实现手部追踪。希望对大家有所帮助!