体感游戏 | 手势识别玩飞机大战游戏(二) 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

相关文章

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

Python从零打造高安全密码管理器

《Python从零打造高安全密码管理器》在数字化时代,每人平均需要管理近百个账号密码,本文将带大家深入剖析一个基于Python的高安全性密码管理器实现方案,感兴趣的小伙伴可以参考一下... 目录一、前言:为什么我们需要专属密码管理器二、系统架构设计2.1 安全加密体系2.2 密码强度策略三、核心功能实现详解