作为一个OpenCV初学者,为了锻炼能力,决定自己写个手势识别程序,结果比网上找的程序效果还好一些,所以分享出来~~

为了得到更好的效果,我利用了背景减法。取摄像头的第一帧为背景,后面所有帧减去第一帧,这样大量减去了杂质。

比较方法用的matchShapes()函数,这个在之前博客里有介绍,这里就不说了。可以参考https://blog.csdn.net/wangshuai610/article/details/79913600点击打开链接

利用matchShapes()函数得到的返回值,去做判断。

对所有图像做相同处理,二值化处理---->中值滤波--->腐蚀--->膨胀--->查找轮廓,接着把每一帧图像与模板图像用matchShapes()函数进行匹配。最后判断出来结果。完整代码下载链接https://download.csdn.net/download/wangshuai610/10366569

https://download.csdn.net/download/wangshuai610/10366569

<textarea readonly="readonly" name="code" class="c++"> void main()
{    VideoCapture cap(0);if(!cap.isOpened()) //检查打开是否成功return;Mat frame;Mat background;Mat dst;int count=0;while(1){cap>>frame;if(!frame.empty()){count++;if(count==1)background = frame.clone(); //提取第一帧为背景帧//imshow("video", frame);dst = MoveDetect(background, frame);imshow("result", dst);</textarea>
<textarea readonly="readonly" name="code" class="c++">  //对三个模板进行处理Mat cloth= imread("cloth.bmp");cvtColor(cloth, cloth, CV_BGR2GRAY);threshold(cloth, cloth, 40, 255, CV_THRESH_BINARY); vector<vector<Point>> contours1;vector<Vec4i> hierarcy1; findContours(cloth, contours1, hierarcy1, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);</textarea>
<textarea readonly="readonly" name="code" class="c++">
threshold(diff, diff, 70, 255, CV_THRESH_BINARY);//imshow("threshold", diff);Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));Mat element2 = getStructuringElement(MORPH_RECT, Size(10,10));medianBlur(diff, diff, 5);//滤波参数根据自己环境调整//imshow("medianBlur", diff);/*blur(diff, diff, Size(10, 10));imshow("blur", diff);*/erode(diff, diff, element);//imshow("erode", diff);dilate(diff, diff, element2);//膨胀参数根据自己环境调整imshow("dilate", diff);vector<vector<Point>> contours;  vector<Vec4i> hierarcy;findContours(diff, contours, hierarcy, CV_RETR_EXTERNAL, CHAIN_APPROX_NONE); //查找轮廓//drawContours(result, contours, -1, Scalar(0,0,255), 2, 8);  //绘制轮廓for(int i=0;i<contours.size();i++)//与三个模板分别比较匹配度{double matchrate1=matchShapes(contours1[0],contours[i],CV_CONTOURS_MATCH_I1, 0.0);cout<<"index1="<<i<<"---"<<setiosflags(ios::fixed)<<matchrate1<<endl;double matchrate2=matchShapes(contours2[0],contours[i],CV_CONTOURS_MATCH_I1, 0.0);cout<<"index2="<<i<<"---"<<setiosflags(ios::fixed)<<matchrate2<<endl;double matchrate3=matchShapes(contours3[0],contours[i],CV_CONTOURS_MATCH_I1, 0.0);cout<<"index3="<<i<<"---"<<setiosflags(ios::fixed)<<matchrate3<<endl;if(matchrate1<matchrate2&&matchrate1<matchrate3){Mat result= imread("cloth1.jpg");imshow("jieguo", result);  putText(dst, "cloth", Point(30, 70), CV_FONT_HERSHEY_COMPLEX, 2, Scalar(0, 0, 255), 2, 8);}if(matchrate2<matchrate1&&matchrate2<matchrate3){Mat result= imread("scissors1.jpg");imshow("jieguo", result);    putText(dst, "scissors", Point(30, 70), CV_FONT_HERSHEY_COMPLEX, 2, Scalar(0, 0, 255), 2, 8);}if(matchrate3<matchrate1&&matchrate3<matchrate1){Mat result= imread("stone1.jpg");imshow("jieguo", result);  putText(dst, "stone", Point(30, 70), CV_FONT_HERSHEY_COMPLEX, 2, Scalar(0, 0, 255), 2, 8);}
</textarea>

OPENCV手势动作识别-石头剪刀布相关推荐

  1. OpenCV挥拳动作识别

    刚参加完一个比赛,其中做了挥拳动作的识别,分享出来,大家可以看看. OpenCV代码下载链接挥拳动作识别代码    https://download.csdn.net/download/wangshu ...

  2. 手势识别(二) - 静态手势动作识别

    我公司的科室开始在公众号上规划一些对外的技术文章了,包括实战项目.模型优化.端侧部署和一些深度学习任务基础知识,而我负责人体图象相关技术这一系列文章,偶尔也会出一些应用/代码解读等相关的文章. 文章在 ...

  3. OpenCV+Mediapipe手势动作捕捉与Unity引擎的结合

    OpenCV+Mediapipe手势动作捕捉与Unity引擎的结合 前言 Demo演示 认识Mediapipe 项目环境 手势动作捕捉部分 实时动作捕捉 核心代码 完整代码 Hands.py py代码 ...

  4. TensorFlow实现:卷积神经网络识别手势动作(有代码与演示)

    完整代码见我的GitHub地址:https://github.com/xingjianzhang1997/gesture-recognition 主要思路:1.构建数据集          2.建立神 ...

  5. Android - xml动画,识别手势动作,代码抽取,获取手机SIM卡串号,获取联系人数据,开机广播,发送/解析短信,报警音乐

    转载请注明出处:https://blog.csdn.net/mythmayor/article/details/72878059 1.Activity的任务栈 1.类似一个木桶,每层只能放一个木块,我 ...

  6. python人体动作识别_hand-keras-yolo3-recognize

    hand-keras-yolo3-recognize 手语图像识别系统设计 一个基于人体姿态研究的手语图像识别系统.根据OpenPose人体姿态开源模型和YOLOv3自训练手部模型检测视频和图像,再把 ...

  7. 图片操作的手势动态识别系统

    数字图像处理技术是将获得的低质量图像利用计算机处理成更适合人眼观察或仪器检测的图像的技术.嵌入式视觉技术是使用摄像机和计算机代替人眼对目标进行识别,跟踪和测量的技术.因此.数字图像处理技术和嵌入式视觉 ...

  8. 动作识别最新高效利器 ACTION-Net:通用的多路径激活模块 | CVPR 2021

    2021-04-20 01:48:02 本文是对我们 CVPR 2021 接收的工作 "ACTION-Net: Multipath Excitation for Action Recogni ...

  9. Kinect 动作识别组件概要设计

    这是数年前在一个公司做的:Kinect手势识别的一个DLL,供其他应用开发调用. 这是概要设计文档.可以了解Kinect技术,以及作为文档写作的参考.代码恕不能提供. Kinect 动 作 识 别 组 ...

最新文章

  1. 微信公众平台消息接口PHP版
  2. Ultimate SLAM:结合事件、图像和惯性测量单元,在HDR和高速场景下实现鲁棒的视觉SLAM...
  3. 【STM32】DAC相关函数和类型
  4. Windows Socket五种I/O模型详细介绍(精)
  5. Java并发编程笔记之ThreadLocal内存泄漏探究
  6. 阿里最“短命”P10员工?曝前百度云高管加盟钉钉不足三周被开除
  7. 判断点是否在多边形内部
  8. android api文档_【粉丝投稿】无需额外注解的 SpringBoot API文档生成工具
  9. koa2 从入门到进阶之路 (五)
  10. acer clear 工具_创作与电竞的全新体验 2019台北电脑展Acer派对开启
  11. 神经网络入门之CNN(二)
  12. c语言sigaction,C语言中的Sigaction和setitimer
  13. Ubuntu 链接ln的使用:创建和删除符号链接
  14. Vue入门---实现汇率换算
  15. SaaS系统权限体系设计
  16. Vue无缝滚动轮播插件vue-seamless-scroll
  17. window创建l2tp
  18. 51单片机 (四)延时函数
  19. 火狐浏览器的全屏兼容问题 allowfullscreen=true
  20. C语言实现一个走迷宫小游戏(深度优先算法)

热门文章

  1. 无需安装Revit软件,无需转换格式,只需一步,实现BIM+GIS数据融合应用
  2. cocos studio 制作csd动画文件 并 加载使用嵌套动画
  3. 六张图快速读懂『项目管理』49个过程组
  4. 面向对象(类和对象、重载、构造方法、this关键字)
  5. 两大热门解释器比较——PyPy和CPython的区别(官方文档翻译)
  6. 吃女儿头发的母亲......
  7. 第四届拍拍贷魔镜杯冠军方案分享
  8. firefox 安装 泼猴
  9. 人生顿悟之那绝不是人脉
  10. 构建自己的github主页方法2