C++中怎么用OpenCV实现手势识别
C++中怎么用OpenCV实现手势识别
本篇内容介绍了“C++中怎么用OpenCV实现手势识别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一、手部关键点检测
如图所示,为我们的手部关键点所在位置。第一步,我们需要检测手部21个关键点。我们使用深度神经网络DNN模块来完成这件事。通过使用DNN模块可以检测出手部21个关键点作为结果输出,具体请看源码。
1.1 功能源码
//手部关键点检测boolHandKeypoints_Detect(Matsrc,vector 如图所示,我们已经通过DNN检测出21个手部关键点所在位置。接下来,我们需要使用这些关键点进行简单的手势识别。 本案例实现手势识别是通过比较关键点位置确定的。首先拿出每个手指尖关键点索引(即4、8、12、16、20)。接下来,对比每个手指其它关键点与其指尖所在位置。 例如我们想确定大拇指现在的状态是张开的还是闭合的。如下图所示,由于OpenCV是以左上角为起点建立坐标系的。当大拇指处于张开状态时(掌心向内),我们可以发现,对比关键点4、关键点3所在位置。当4的x坐标大于3的x坐标时,拇指处于张开状态;当4的x坐标小于3的x坐标时,拇指处于闭合状态。 同理,其余四个手指,以食指为例。当关键点8的y坐标小于关键点6的y坐标时,此时食指处于张开状态;当关键点8的y坐标大于关键点6的y坐标时,此时食指处于闭合状态。 当手指处于张开状态时,我们计数1。通过统计手指的张开数达到手势识别的目的。具体请看源码。 //手势识别boolHandpose_Recognition(vector 通过以上步骤,我们已经有了手部关键点所在坐标位置以及对应的手势结果,接下来就进行效果展示。 在这里,为了逼格高一点,我们将下面的手势模板图像作为输出结果放进我们的测试图中。具体操作请看源码。 //识别效果显示boolShowResult(Mat&src,vector 除此之外,我们还可以将所有的图片整合成一张图,具体请看源码吧。 //将所有图片整合成一张图片boolStitching_Image(vector 最终结果如图所示。以上就是整个案例的流程啦。。。 #include “C++中怎么用OpenCV实现手势识别”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注恰卡编程网网站,小编将为大家输出更多高质量的实用文章!1.2 功能效果
二、手势识别
2.1算法原理
2.2功能源码
三、结果显示
3.1功能源码
3.2效果显示
四、源码
推荐阅读
-
Linux如何安装和使用 OpenCV 计算机视觉库
-
C++之list容器模拟怎么实现
C++之list容器模拟怎么实现这篇“C++之list容器模拟怎么...
-
C++深浅拷贝及简易string类怎么实现
C++深浅拷贝及简易string类怎么实现这篇“C++深浅拷贝及简...
-
C++之list容器如何使用
C++之list容器如何使用今天小编给大家分享一下C++之list...
-
C++内存对齐如何实现
C++内存对齐如何实现本篇内容介绍了“C++内存对齐如何实现”的有...
-
C/C++如何获取CAN信号
C/C++如何获取CAN信号本篇内容主要讲解“C/C++如何获取C...
-
C/C++程序链接与反汇编工具objdump如何使用
C/C++程序链接与反汇编工具objdump如何使用这篇文章主要介...
-
C++聚合体初始化的方法是什么
C++聚合体初始化的方法是什么本篇内容介绍了“C++聚合体初始化的...
-
C++引用如何使用
C++引用如何使用这篇文章主要介绍“C++引用如何使用”的相关知识...
-
C++类和对象之封装及class与struct的区别是什么