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

news/2025/2/19 23:49:45/

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

  • 使用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深度学习,感谢支持!


http://www.ppmy.cn/news/275845.html

相关文章

电视机体感游戏大盘点

跑步 跑步看起来很简单&#xff0c;跟“骑牛”类似&#xff0c;需要晃动手柄&#xff0c;以单人模式操控显示屏的主角前进&#xff0c;要学会跳跃等跨障碍。 不过&#xff0c;光是跑步的话就太简单了&#xff0c;路上还有很多精彩。游戏增加了奖励和惩罚项目&#xff0c;比如捡…

商业计划书:基于手机摄像头的体感运动游戏

商业计划书&#xff1a;基于手机摄像头的体感运动游戏 概述 我们的公司致力于开发一种基于手机摄像头的体感运动游戏&#xff0c;它可以让用户使用简单而实用的技术来进行沉浸式健身体验。用户可以通过运动感应在手机上玩游戏&#xff0c;并配合深度学习算法&#xff0c;为用…

体感游戏 | 手势识别玩飞机大战游戏(一) 用pygame实现飞机大战小游戏

Color Space OpenCV与AI深度学习 后面将分四篇文章来介绍实现手势识别控制飞机大战游戏的功能&#xff0c;它们分别是&#xff1a; 使用Pygame实现简易飞机大战小游戏 使用PythonOpenCV实现简单手势识别 使用OpenCV实现手势识别玩飞机大战游戏 使用TensorFlow实现手势识别玩…

android体感游戏,用安卓手机玩身临其境的AR体感游戏 我看行

“全面屏”、“可折叠屏幕”、“5G”之后&#xff0c;AR技术的普及有望成为智能手机下一个重要的发展节点。谈起智能手机上的AR技术&#xff0c;看似陌生&#xff0c;其实已经由来已久。从手机地图的AR实景导航&#xff0c;到春节期间AR找红包等活动;从风靡全球的《PokemonGO》…

程序员买啥游戏机,自己动手做一个体感小游戏

摘要&#xff1a;结合一个仿制的简易Flappy Bird游戏&#xff0c;ModelBox体感小游戏就这样诞生了。 本文分享自华为云社区《ModelBox开发案例 - 体感小游戏》&#xff0c;作者&#xff1a;菊厂飞戈。 前段时间&#xff0c;小鱼老师在AI说发布了文章 ModelBox推理真的高效吗&a…

耗时2天,我自制了一台体感游戏机

大家好&#xff0c;欢迎来到 Crossin的编程教室~ 几天不见&#xff0c;Crossin 又去做什么游戏去了呢&#xff1f;这次我做的不是游戏&#xff0c;而是游戏机&#xff01;而且是体感游戏机。 说到体感游戏&#xff0c;现在大家可能最多想到的是 switch 上的健身环大冒险。 ​…

JavaSE03_流程控制语句

JavaSE-03 [流程控制语句] 第一章 流程控制 1.1 流程概述 在一个程序执行的过程中&#xff0c;每条语句的执行顺序对程序的结果是由直接影响的&#xff0c;也就是&#xff0c;语句的流程对运行结果有着直接的影响&#xff0c;所以&#xff0c;必须清楚知道每条语句的执行流程…

视觉相机模型以及投影原理推导——(单目)

相机模型简介 参考文献&#xff1a;视觉SLAM十四讲、视觉惯性SLAM理论与源码分析、该博客、文中的公式直接引用上面的文章&#xff0c;如有侵权请联系本人删除 1、针孔相机模型 投影过程 三维世界中的物体&#xff08;目标点&#xff09;P反射光线&#xff0c;通过相机光心&am…