使用open-cv实现简单的手势识别。刚刚接触python不久,看到了很多有意思的项目,尤其时关于计算机视觉的。网上搜到了一些关于手势处理的实验,我在这儿简单的实现一下(PS:和那些大佬比起来真的是差远了,毕竟刚接触不久),主要运用的知识就是opencv,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几天,做出这个东西自己已经很满足了,当然和那些大佬也是没法比的,没有什么东西是速成的,只能一步一个脚印的走。

到此这篇关于python实现手势识别的示例(入门)的文章就介绍到这了,更多相关python 手势识别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

本文标题: python实现手势识别的示例(入门)

本文地址: http://www.cppcns.com/jiaoben/python/307856.html

python初学者代码示例_python实现手势识别的示例(入门)相关推荐

  1. python工程代码语法_python编码环境安装与基本语法

    一.pycharm的基本使用 1.python以及pycharm的安装 python的版本选择:3.x版本就行 pycharm的版本选择:社区版就够用 pycharm只是一个编写工具,python才是 ...

  2. python手机代码编辑器_Python怎么打开代码编辑器

    Python作为近几年来最为优秀的编程语言之一,受到了很多程序员的追捧,现在我教大家如何打开Python的代码编辑器 工具/原料 电脑 Python 方法/步骤 1 首先,点击[开始]按钮,开始按钮几 ...

  3. python初学者代码示例_python入门(非常详细的教程)

    对于初学者而言,您要做的只是专注于Python语言,阐明学习重点,掌握学习节奏,并逐步学习.根据我多年的学习和工作经验,编程语言的学习分为以下三个步骤,无论您是否具有编程基础,都可以通过比较来完成. ...

  4. python初学者代码示例_python基础示例

    7.写代码 (1)实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败! _name = "seven"_pwd= "12 ...

  5. python初学者代码示例_Selenium 快速入门笔记和代码示例(Python版)

    链接 文档链接: 安装 selenium 模块和 Chrome 浏览器驱动 步骤: 安装 Selenium 模块: pip install selenium 下载浏览器驱动(下载即可,无需安装,使用时 ...

  6. python 查看数据结构类型_python 数据结构类型总结(示例代码)

    文章目录 字符串: 1.用引号来创建字符串,单双引号都可(三引号也可:三引号可以复制复杂的字符串,三引号内一个字符串可占多行,字符串中可包含换行符.制表符和其他特殊字符). eg. >>& ...

  7. python编程与特征提取_Python进行特征提取的示例代码

    #过滤式特征选择 #根据方差进行选择,方差越小,代表该属性识别能力很差,可以剔除 from sklearn.feature_selection import VarianceThreshold x=[ ...

  8. python初学者代码-Python-为什么Python是初学者的完美选择?

    原标题:Python-为什么Python是初学者的完美选择? 在过去的两年中,Python部落已经教会了成百上千个开发人员学会了他们的第一个编程语言.我们一直关注的一件事就是为一个初学程序员找到最好的 ...

  9. python示例_Python中的缩进示例

    python示例 It is generally good practice for you not to mix tabs and spaces when coding in Python. Doi ...

最新文章

  1. wincc报表步骤实例_Wincc 如何连接SQL Server 数据库
  2. JavaScript基础初始时期分支(018)
  3. ES6之let(理解闭包)和const命令
  4. P4768 [NOI2018] 归程(kruskal 重构树)
  5. 服务器登陆显示其他用户,连接远程服务器显示其他用户
  6. mysql自增长序号_MySQL rownumber SQL生成自增长序号使用介绍
  7. 《庆余年》里的五竹,到底是不是机器人?
  8. express+nodecoffee写passport登录验证实例(一)
  9. MySQL 基础 —— 数据类型、各种变量
  10. 小米note2鸿蒙ROM,小米Note2官方原版系统rom线刷刷机包_小米Note2线刷官方包
  11. python3爬取微博评论教程_python3爬取微博评论并存为xlsx
  12. 揭开Docker的面纱
  13. montypython买火柴_python nltk 笔记(持续更新)
  14. 日本研发5nm取得重大进展,和美国远离EUV,ASML陷入众叛亲离境地
  15. sql2000的安装以及sp4的升级
  16. LeetCode刷题框架总结
  17. ALPU-C防抄板加密芯片
  18. 用软笔,写慢字:键盘时代如何拯救书法?
  19. 推荐几首最近在听的歌曲
  20. 馆员工作站的功能与特点

热门文章

  1. 数据链路层介质访问控制——信道划分、随机访问和轮询访问
  2. SAP 电商云 Spartacus UI 设置 Delivery Mode 的时序分析和一个竞争条件问题分享
  3. SAP Spartacus PageMetaService 的单元测试
  4. 如何在SAP Spartacus里捕捉感兴趣的事件
  5. Angular里interpolation text节点的创建逻辑,单步调试
  6. SAP系统和微信集成的系列教程之八:100行代码在微信公众号里集成地图搜索功能
  7. SAP Spartacus读取User Address的action是如何被Effect接收的
  8. SAP Spartacus ProductConnector和ProductService实现
  9. SAP Spartacus中使用到的Angular ModuleWithProviders类型
  10. SAP Data Intelligence上的Python Operator