【计算机视觉40例】案例07:数字手势识别

本文介绍了基于计算机视觉的数字手势识别方法,主要利用OpenCV库来识别2到5的手势。通过计算手势图像中的凸缺陷数量来区分数字,对于0和1的识别,则依赖于凸包与轮廓的关系。当凹陷区域占比超过10%时,手势可能为1,否则可能是0。整个识别过程包括图像预处理、凸包计算、凸缺陷检测等步骤,实现对手势的准确识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导读】本文是专栏《计算机视觉40例简介》的第7个案例《手势识别》。该专栏简要介绍李立宗主编《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书的40个案例。

目前,该书已经在电子工业出版社出版,大家可以在京东、淘宝、当当等平台购买。

大家可以在公众号“计算机视觉之光”回复关键字【案例07】获取本文案例的源代码及使用的测试图片等资料。

针对本书40个案例的每一个案例,分别录制了介绍视频。如果嫌看文字版麻烦,可以关注公众号“计算机视觉之光”直接观看视频介绍版。

本文简要介绍书中第7个案例(数字手势识别)的算法原理,关于具体实现,大家可以参考书中第8章手势识别。

在进行数字手势识别时,将手势图中“凹陷区域”(该区域被称为凸缺陷)的个数作为识别的重要依据,如图 1所示:

  1. 表示数值0、数值1的手势具有0个凹陷区域(不存在凹陷区域);
  2. 表示数值2的手势具有1个凹陷区域;
  3. 表示数值3的手势具有2个凹陷区域;
  4. 表示数值4的手势具有3个凹陷区域;
  5. 表示数值5的手势具有4个凹陷区域;

1 手势

从上述分析可以看出,在对表示数字的手势进行识别时,直接计算其中的凹陷区域个数即可识别数字2到数字5。

但是,在凹陷个数为0时,既可能表示数值0也可能表示数值1。因此,此时无法通过凹陷区域的个数来识别手势所表示的数字。这种情况下,就需要应用到凸包的概念。

逼近多边形是轮廓的高度近似,但是有时候,我们希望使用一个多边形的凸包来简化它。凸包跟逼近多边形很像,只不过它是物体最外层的“凸”多边形。凸包指的是完全包含原有轮廓,并且仅由轮廓上的点所构成的多边形。凸包的每一处都是凸的,即在凸包内连接任意两点的直线都在凸包的内部。在凸包内,任意连续三个点所构成的面向内部的角,其角度小于180°。例如,在图 2中,最外层的多边形为机械手的凸包,使用它可以处理手势识别等问题。

2  凸包示意图

应用凸包与轮廓的关系即可判断手势0和手势1的差别。如图 3所示,手势0与手势1在以下方面存在着差别:

  1. 手势0的凸包,与其轮廓基本一致。
  2. 手势1的凸包,要大于其轮廓值。在手势1的轮廓与凸包之间存在着相对较大的凹陷区域(凸缺陷),凹陷区域面积占比在10%以上。当然,这个10%是个大概值,它因人而异,不是固定值。不同的人手指长度一样,因此该值有一定的波动范围。

3 手势0与手势1

根据以上分析,可以简单理解如下:

  1. 凸包面积 = 凹陷面积 + 轮廓面积
  2. 针对手势0:轮廓/凹陷面积 > 0.9 (二者基本一致)
  3. 针对手势1:轮廓/凹陷面积 <= 0.9 (凹陷面积较大,占比超过0.1)

利用二者在上述特征上的区别可以进行手势0和手势1的识别。

当然,其他过程就是简单的图像处理流程了,手势识别的基本流程如图4所示。

4流程图

手势识别过程如图5所示,能够识别在屏幕内的固定区域的数字手势。

图5 手势识别

在《计算机视觉40例》中,我们使用大概10页的篇幅,从理论基础(获取凸包、凸缺陷、凸缺陷与凸包面积比)、识别过程(识别流程、代码实现)等角度系统深入介绍了数字手势识别的具体算法和实现流程,并对代码实现进行了细致的解释。同时,本章中还介绍了石头剪刀布手势识别的基本原理和实现过程。欢迎大家在《计算机视觉40例——从入门到深度学习(OpenCV-Python)》第8章《手势识别》中获取更详细的内容。

《计算机视觉40例——从入门到深度学习(OpenCV-Python)》在介绍Python基础、OpenCV基础、计算机视觉理论基础、深度学习理论入门的基础上,介绍了计算机视觉领域内具有代表性的40个典型案例。这些案例中,既有传统的案例(数字识别、答题卡识别、物体计数、缺陷检测等),也有深度学习案例(图像分类、风格迁移、姿势识别、实例分割等),还有人脸识别方面(表情识别、驾驶员疲劳监测、识别性别与年龄等)案例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

superdont

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值