Python+OpenCV3简单手势识别

本文介绍了使用Python和OpenCV3进行简单手势识别的步骤,包括安装相关库如opencv-python、opencv-contrib-python和numpy,通过肤色检测、高斯滤波、边缘轮廓检测等方法实现手势识别。代码中存在需要优化的地方,例如在未检测到手时的异常处理。最后展示了实际效果,并提醒读者注意手的位置以进行准确检测。
摘要由CSDN通过智能技术生成


今天教大家一个有趣的玩法,如何利用Python+opencv3实现简单的手势识别。当然网上也有相关教程,但绝大多数给出的代码拿来之后你是不能直接用的,这对于拿来主义的同学来说简直太“禽兽”了。所以今天我也会给出所有代码,只要配置好环境就可以运行。话不多说接下来就进入正题。

安装相关库

这个安装库的重要性就不用我多说了,但凡是想直接用人家的代码,就要安装人家运行所需的全部库。

pip install opencv-python

pip install opencv-contrib-python

pip install numpy

原理简述

第一步: 加载图片,无论你是用cv2导入一张静态手势图片还是用摄像头导入实时图片都可以。
第二步: 肤色检测,基于HSV颜色空间H,S,V范围筛选法 HSV中 7<H<20 28<S<256 50<V<256
第三步: 进行高斯滤波
第四步: 边缘轮廓检测
第五步: 求出手势的凹凸点
第六步: 利用凹凸点个数判断当前手势,例如:0个凹凸点就是拳头,4个凹点就是布也就是5。

代码

接下来就是你们最开心的 时刻了-看代码。哈,你们高兴的太早了,我的代码注释很少的。所以。。。。我尽量添上注释。

我明说了,代码虽然可以运行,但有BUG,要在一个地方加异常判断,否则如果没检测到手的话程序就会报错退出,至于在哪加相信也不难,你们好好优化吧。问我,我可是要收费的。手动dog

# _*_ coding: UTF-8 _*_
import cv2
import numpy as np
import math
cap = cv2.VideoCapture(0)

while(cap.isOpened()):
    ret,frame = cap.read() # 读取摄像头每帧图片
    
    frame = cv2.flip(frame,1)
    kernel = np.ones((2,2),np.uint8)
    roi = frame[100:300,100:300] # 选取图片中固定位置作为手势输入

    cv2.rectangle(frame,(100,100),(300,300),(0,0,255),0) # 用红线画出手势识别框
    # 基于hsv的肤色检测
    hsv = cv2.cvtColor(roi,cv2.COLOR_BGR2HSV)
    lower_skin = np.array([0,28,70],dtype=np.uint8)
    upper_skin = np.array([20, 255, 255],dtype=np.uint8)
    
    # 进行高斯滤波
    mask = cv2.inRange(hsv,lower_skin,upper_skin)
    mask = cv2.dilate(mask,kernel,iterations=4)
    mask = cv2
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值