python实现手势识别的示例(入门)

作者:露露核桃露 时间:2021-02-17 03:52:55 

使用open-cv实现简单的手势识别。刚刚接触python不久,看到了很多有意思的项目,尤其时关于计算机视觉的。网上搜到了一些关于手势处理的实验,我在这儿简单的实现一下(PS:和那些大佬比起来真的是差远了,毕竟刚接触不久),主要运用的知识就是opencv,python基本语法,图像处理基础知识。

最终实现结果:

python实现手势识别的示例(入门)

获取视频(摄像头

这部分没啥说的,就是获取摄像头。


cap = cv2.VideoCapture("C:/Users/lenovo/Videos/1.mp4")#读取文件
#cap = cv2.VideoCapture(0)#读取摄像头
while(True):
 ret, frame = cap.read()  key = cv2.waitKey(50) & 0xFF
 if key == ord('q'):
 break
cap.release()
cv2.destroyAllWindows()

肤色检测

这里使用的是椭圆肤色检测模型
在RGB空间里人脸的肤色受亮度影响相当大,所以肤色点很难从非肤色点中分离出来,也就是说在此空间经过处理后,肤色点是离散的点,中间嵌有很多非肤色,这为肤色区域标定(人脸标定、眼睛等)带来了难题。如果把RGB转为YCrCb空间的话,可以忽略Y(亮度)的影响,因为该空间受亮度影响很小,肤色会产生很好的类聚。这样就把三维的空间将为二维的CrCb,肤色点会形成一定得形状,如:人脸的话会看到一个人脸的区域,手臂的话会看到一条手臂的形态。


def A(img):

YCrCb = cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB) #转换至YCrCb空间
 (y,cr,cb) = cv2.split(YCrCb) #拆分出Y,Cr,Cb值
 cr1 = cv2.GaussianBlur(cr, (5,5), 0)
 _, skin = cv2.threshold(cr1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) #Ostu处理
 res = cv2.bitwise_and(img,img, mask = skin)
 return res

轮廓处理

轮廓处理的话主要用到两个函数,cv2.findContours和cv2.drawContours,这两个函数的使用使用方法很容易搜到就不说了,这部分主要的问题是提取到的轮廓有很多个,但是我们只需要手的轮廓,所以我们要用sorted函数找到最大的轮廓。


def B(img):

#binaryimg = cv2.Canny(Laplacian, 50, 200) #二值化,canny检测
 h = cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) #寻找轮廓
 contour = h[0]
 contour = sorted(contour, key = cv2.contourArea, reverse=True)#已轮廓区域面积进行排序
 #contourmax = contour[0][:, 0, :]#保留区域面积最大的轮廓点坐标
 bg = np.ones(dst.shape, np.uint8) *255#创建白色幕布
 ret = cv2.drawContours(bg,contour[0],-1,(0,0,0),3) #绘制黑色轮廓
 return ret

全部代码


""" 从视频读取帧保存为图片"""
import cv2
import numpy as np
cap = cv2.VideoCapture("C:/Users/lenovo/Videos/1.mp4")#读取文件
#cap = cv2.VideoCapture(0)#读取摄像头

#皮肤检测
def A(img):

YCrCb = cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB) #转换至YCrCb空间
 (y,cr,cb) = cv2.split(YCrCb) #拆分出Y,Cr,Cb值
 cr1 = cv2.GaussianBlur(cr, (5,5), 0)
 _, skin = cv2.threshold(cr1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) #Ostu处理
 res = cv2.bitwise_and(img,img, mask = skin)
 return res

def B(img):

#binaryimg = cv2.Canny(Laplacian, 50, 200) #二值化,canny检测
 h = cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) #寻找轮廓
 contour = h[0]
 contour = sorted(contour, key = cv2.contourArea, reverse=True)#已轮廓区域面积进行排序
 #contourmax = contour[0][:, 0, :]#保留区域面积最大的轮廓点坐标
 bg = np.ones(dst.shape, np.uint8) *255#创建白色幕布
 ret = cv2.drawContours(bg,contour[0],-1,(0,0,0),3) #绘制黑色轮廓
 return ret

while(True):

ret, frame = cap.read()
 #下面三行可以根据自己的电脑进行调节
 src = cv2.resize(frame,(400,350), interpolation=cv2.INTER_CUBIC)#窗口大小
 cv2.rectangle(src, (90, 60), (300, 300 ), (0, 255, 0))#框出截取位置
 roi = src[60:300 , 90:300] # 获取手势框图

res = A(roi) # 进行肤色检测
 cv2.imshow("0",roi)

gray = cv2.cvtColor(res, cv2.COLOR_BGR2GRAY)
 dst = cv2.Laplacian(gray, cv2.CV_16S, ksize = 3)
 Laplacian = cv2.convertScaleAbs(dst)

contour = B(Laplacian)#轮廓处理
 cv2.imshow("2",contour)

key = cv2.waitKey(50) & 0xFF
 if key == ord('q'):
     break
cap.release()
cv2.destroyAllWindows()

本人学了python几天,做出这个东西自己已经很满足了,当然和那些大佬也是没法比的,没有什么东西是速成的,只能一步一个脚印的走。

来源:https://blog.csdn.net/qq_45874897/article/details/105516981

标签:python,手势识别
0
投稿

猜你喜欢

  • Python笔记之观察者模式

    2023-04-05 18:37:20
  • 实现MySQL远程访问办法

    2010-11-25 17:17:00
  • WEB手绘稿常用元素 之 箭头

    2009-05-08 12:33:00
  • django富文本编辑器的实现示例

    2021-02-02 06:20:33
  • 浅谈keras中的目标函数和优化函数MSE用法

    2022-01-19 02:15:55
  • Python连接字符串过程详解

    2022-12-09 23:49:45
  • Python利用filestools模块实现水印添加

    2021-09-11 06:36:08
  • 浅谈python数据类型及类型转换

    2023-08-28 15:25:32
  • 复制链接到剪贴板,兼容Firefox Chrome IE

    2008-12-16 13:23:00
  • ASP 精华源码收集(五年总结)第1/20页

    2011-04-07 11:15:00
  • Python实现实时跟随微信窗口移动的GUI界面

    2022-06-09 11:12:25
  • python数据库操作指南之PyMysql使用详解

    2023-01-02 04:04:17
  • 基于python的图片修复程序(实现水印去除)

    2021-07-03 13:35:04
  • MacOS中 VSCode 安装 GO 插件失败问题的快速解决方法

    2023-06-18 02:32:32
  • 常见数据库系统比较 Oracle数据库

    2010-07-28 12:44:00
  • python图书管理系统

    2023-01-30 17:35:48
  • CSS和HTML与前端技术层图示

    2010-04-05 21:54:00
  • 用Python代码来解图片迷宫的方法整理

    2023-03-17 18:35:43
  • 白鸦:界面烂还是界面设计烂?

    2008-04-03 16:05:00
  • 指导:SQL Server无日志恢复数据库

    2009-02-20 17:07:00
  • asp之家 网络编程 m.aspxhome.com