OPENCV手势识别抓取图片

PENCV手势识别抓取图片

一位油管的小哥做的项目非常棒,照着写了一个。 代码: 注意:看好cvzone的版本,太新的版本中有个函数没有,如果找不到这个函数的时候请更换一下库的版本。

import cv2
from cvzone.HandTrackingModule import HandDetector
import cvzone
import numpy as np

cap = cv2.VideoCapture(0)
cap.set(3, 1280)
cap.set(4, 720)
detector = HandDetector(detectionCon=0.8)
colorR = (255, 0, 255)

cx, cy, w, h = 100, 100, 200, 200


class DragRect():
    def __init__(self, posCenter, size=[200, 200]):
        self.posCenter = posCenter
        self.size = size

    def update(self, cursor):
        cx, cy = self.posCenter
        w, h = self.size
        # 指尖在矩形内
        if cx - w // 2 < curosor[0] < cx + w // 2 and 
                cy - h // 2 < curosor[1] < cy + h // 2:
            self.posCenter = cursor


rectList = []
for x in range(5):
    rectList.append(DragRect([x * 250 + 150, 150]))

while True:
    success, img = cap.read()
    img = cv2.flip(img, 1)
    img = detector.findHands(img)
    lmList, _ = detector.findPosition(img)

    if lmList:

        l, _, _ = detector.findDistance(8, 12, img, draw=False)
        print(l)

        if l < 30:
            curosor = lmList[8]  # finger
            # 调用更新
            for rect in rectList:
                rect.update(curosor)
    # draw 实体填充
    # for rect in rectList:
    #     cx, cy = rect.posCenter
    #     w, h = rect.size
    #     cv2.rectangle(img, (cx - w // 2, cy - h // 2), (cx + w // 2, cy + h // 2), colorR, cv2.FILLED)
    #     cvzone.cornerRect(img, (cx - w // 2, cy - h // 2, w, h), 20, rt=0)

    # 虚化
    imgNew = np.zeros_like(img)
    for rect in rectList:
        cx, cy = rect.posCenter
        w, h = rect.size
        cv2.rectangle(imgNew, (cx - w // 2, cy - h // 2), (cx + w // 2, cy + h // 2), colorR, cv2.FILLED)
        cvzone.cornerRect(imgNew, (cx - w // 2, cy - h // 2, w, h), 20)
    out = img.copy()
    alpja = 0.5
    mask = imgNew.astype(bool)
    #print(mask.shape)
    out[mask] = cv2.addWeighted(img, alpja, imgNew, 1, -alpja, 0)[mask]

    cv2.imshow("Image", out)
    cv2.waitKey(1)
经验分享 程序员 微信小程序 职场和发展