体感游戏 | 手势识别玩飞机大战游戏(二) Python+OpenCV实现简易手势识别功能

本文主要是介绍体感游戏 | 手势识别玩飞机大战游戏(二) Python+OpenCV实现简易手势识别功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    后面将分四篇文章来介绍实现手势识别控制飞机大战游戏的功能,它们分别是:

  • 使用Pygame实现简易飞机大战小游戏

  • 使用Python+OpenCV实现简单手势识别

  • 使用OpenCV实现手势识别玩飞机大战游戏

  • 使用TensorFlow实现手势识别玩飞机大战游戏


    今天是第二部分:Python+OpenCV实现简易手势识别功能。简易的手势识别,所以功能也很简单,识别手势1~5就行,当然我们控制飞机时只需要用到最多3个手势:发射子弹、向左移动和向右移动。所以1~5够用了,当然你也可以用手势的移动方向来控制飞机的移动方向,只需要计算手势轮廓的重心位置变化即可。

    手势识别的实现步骤也比较简单,分以下三个步骤:

  1. HSV提取包含手势区域轮廓

  2. 计算轮廓多边形逼近和凸包缺陷

  3. 通过凸包缺陷距离来判断手指缝数量来计算手势


(1) HSV提取肤色轮廓,然后筛选找出手部轮廓

hsv_img=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)lower_hsv_1 = np.array([0,50,50])#颜色范围低阈值upper_hsv_1 = np.array([20,255,255])#颜色范围高阈值lower_hsv_2 = np.array([150,50,50])#颜色范围低阈值upper_hsv_2 = np.array([180,255,255])#颜色范围高阈值mask1 = cv2.inRange(hsv_img,lower_hsv_1,upper_hsv_1)mask2 = cv2.inRange(hsv_img,lower_hsv_2,upper_hsv_2)mask = mask1 + mask2mask = cv2.medianBlur(mask,5)k1=np.ones((5,5), np.uint8)mask = cv2.dilate(mask, k1, iterations=1)mask = cv2.erode(mask, k1, iterations=1)mask_color = cv2.cvtColor(mask,cv2.COLOR_GRAY2BGR)cv2.imshow("mask", mask)#cv2.imwrite("mask.png", mask)black_img = np.zeros(mask.shape,np.uint8)
contours,hierarchy = cv2.findContours(mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)if len(contours) < 1:    return 0, img      contours.sort(key = cnt_area, reverse=True)  (x0, y0, w0, h0) = cv2.boundingRect(contours[0])if(w0>=100 and h0>=100):    cv2.rectangle(img,(x0,y0),(x0+w0,y0+h0),(255,0,255),2)

(2) 多边形逼近和轮廓凸包缺陷计算

epsilon = 0.01 * cv2.arcLength(contours[0], True)approx = cv2.approxPolyDP(contours[0],epsilon,True)cv2.drawContours(black_img,[approx],-1,(255,0,255),2)
contours2,hierarchy2 = cv2.findContours(black_img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)if len(contours) < 1:  return 0, imghull = cv2.convexHull(contours2[0],returnPoints=False)defects = cv2.convexityDefects(contours2[0],hull)

(3) 凸包缺陷距离筛选来计算手势数字

if d >= 13000:      cv2.line(img,start,end,[0,255,0],3)#凸包      cv2.circle(img,start,10,[0,255,255],3)      cv2.circle(img,end,10,[0,255,255],3)      cv2.circle(img,far,10,[0,0,255],3)#凸包缺陷点      pre_start = start      pre_end = end      pointNum += 1        cv2.putText(img,'hand-%d'%pointNum,(10,35),font,1.2,(0,255,255),3)       return pointNum, img 

图片

图片

图片

视频效果:

https://www.bilibili.com/video/BV1pV411t7Rq/

源码请在公众号回复"手势识别"即可获取,更多视觉学习资讯请关注:OpenCV与AI深度学习,感谢支持!

这篇关于体感游戏 | 手势识别玩飞机大战游戏(二) Python+OpenCV实现简易手势识别功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/685078

相关文章

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c