OpenCV 手势识别:拍照、录像功能详解及代码示例

想体验用 手势 控制拍照和录像的乐趣吗?本文将带您使用 OpenCVMediaPipe 库,一步步实现这一酷炫功能!

一、准备工作

  1. 安装必要库

    bash pip install opencv-python mediapipe autopy cvzone

  2. 准备摄像头:确保您的电脑连接了可正常工作的摄像头。

二、代码详解pythonimport cv2import autopyimport mediapipe as mpfrom cvzone.HandTrackingModule import HandDetectorimport osimport timeimport numpy as np

设置屏幕和摄像头分辨率wScr, hScr = autopy.screen.size()wCam, hCam = 1280, 720

设置手部检测区域pt1, pt2 = (100, 100), (1200, 700)

打开摄像头cap = cv2.VideoCapture(0) cap.set(3, wCam) cap.set(4, hCam)

设置保存路径path = 'E:/'

初始化手部检测器detector = HandDetector(detectionCon=0.8)

初始化变量startDist = Nonecx, cy = 500, 500scale = 0i = 1

主循环while cap.isOpened(): success, img = cap.read() img = cv2.flip(img, flipCode=1) # 翻转图像

if success:        hands, img = detector.findHands(img)  # 检测手部        cv2.imshow('img', img)

# 按'q'键退出    if cv2.waitKey(1) & 0xFF == ord('q'):        break

# 双手控制    if len(hands) == 2:        lmList1 = hands[0]['lmList']        lmList2 = hands[1]['lmList']        fingers = detector.fingersUp(hands[0])        foots = detector.fingersUp(hands[1])

    # 握拳退出        if detector.fingersUp(hands[0]) == [0, 0, 0, 0, 0] and detector.fingersUp(hands[1]) == [0, 0, 0, 0, 0]:            print('结束')            cap.release()            cv2.destroyAllWindows()            break

    # 竖起食指拍照        if detector.fingersUp(hands[0]) == [0, 1, 1, 0, 0] and detector.fingersUp(hands[1]) == [0, 1, 1, 0, 0]:            ret, img = cap.read()            cv2.imwrite(path + 'person' + str(i) + '.jpg', img)            i = i + 1            print('拍照成功')            time.sleep(1)

# 单手控制    if len(hands) == 1:        # 竖起食指、中指、无名指拍照        if detector.fingersUp(hands[0]) == [0, 0, 1, 1, 1]:            time.sleep(2)            ret, img = cap.read()            cv2.imwrite(path + 'person' + str(i) + '.jpg', img)            i = i + 1            print('拍照成功')            time.sleep(1)

    # 竖起食指和中指开始录像        if detector.fingersUp(hands[0]) == [0, 1, 1, 1, 1]:            cap = cv2.VideoCapture(0)            fourcc = cv2.VideoWriter_fourcc(*'XVID')            out = cv2.VideoWriter('output.avi', fourcc, 30.0, (640, 480))

        while cap.isOpened():                ret, frame = cap.read()                if ret == True:                    frame = cv2.flip(frame, 1)                    out.write(frame)  # 保存视频                    cv2.imshow('frame', frame)                    if cv2.waitKey(1) & 0xFF == ord('q'):                        break                else:                    break

        # 释放资源            cap.release()            out.release()            cv2.destroyAllWindows()

释放资源cap.release()cv2.destroyAllWindows()

三、常见问题及解决方案

  1. 缺少包: 运行代码前,请确保已安装所有需要的库。

  2. 摄像头问题: 检查摄像头连接是否正常,驱动是否安装正确。

  3. 文件路径问题: 确保保存路径存在且有写入权限。

  4. 控制流问题: 注意代码中的循环和条件判断逻辑,避免出现死循环或逻辑错误。

四、总结

本文介绍了如何使用 OpenCV 和 MediaPipe 实现基于手势识别的拍照和录像功能。您可以根据自己的需求修改代码,例如添加更多手势或更改控制逻辑。希望这篇文章能帮助您开启手势控制的奇妙之旅!

OpenCV 手势识别:拍照、录像功能详解及代码示例

原文地址: https://www.cveoy.top/t/topic/cN9E 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录