哪种方法最适合寻找手势识别的感兴趣区域

Posted

技术标签:

【中文标题】哪种方法最适合寻找手势识别的感兴趣区域【英文标题】:which method is the best for finding region of interet for hand gesture recognition 【发布时间】:2016-08-31 19:00:46 【问题描述】:

我正在测试几种在手势中查找感兴趣区域的方法。例如在opencv中,我发现了一些方法,如camshift(用于跟踪感兴趣的对象),一些背景提取方法(MoG,MoG2,..),这些方法专门用于视频中从前景中减去背景,当我们有手作为具有复杂背景的视频中的对象。还有 GrabCut 和 backproject 方法,可用于静态手的姿势。轮廓、边缘检测或皮肤方法是用于检测图像或视频中的手的其他一些方法。最后我发现 haar cascade 也可以使用。我想知道从这个阶段通过,考虑到我使用具有复杂背景的图像,哪种算法是最佳选择。像 Grabcut 或 backproject 这样的算法很好,但最重要的问题是我应该手动将一些区域指定为前景或背景,这不是应该的。 选择了roi的方法后,一般来说手势识别最重要的特征是什么?对于提取特征,您的建议是哪种方法?它可以很好地与 svm、knn 等通用分类器之一配合使用,以对指定图像进行分类。

感谢大家抽出宝贵的时间

【问题讨论】:

【参考方案1】:

您可以从基于 HSV 的肤色过滤开始,以隔离图像中的肤色对象……在大多数情况下,这将构成您的脸和手掌。然后,您可以使用面部检测来隔离,然后消除面部斑点。 提取手掌后,您可以简化其轮廓(检查 OpenCV 中的 approxPolyDP)并计算手部轮廓中凸面缺陷的数量。由于您尚未指定您正在使用哪种编程语言,因此这里有一个 Python 代码可以帮助您开始进行皮肤检测:

import cv2

def nothing(x): #needed for createTrackbar to work in python.
    pass    

cap = cv2.VideoCapture(0)
cv2.namedWindow('temp')
cv2.createTrackbar('bl', 'temp', 0, 255, nothing)
cv2.createTrackbar('gl', 'temp', 0, 255, nothing)
cv2.createTrackbar('rl', 'temp', 0, 255, nothing)
cv2.createTrackbar('bh', 'temp', 255, 255, nothing)
cv2.createTrackbar('gh', 'temp', 255, 255, nothing)
cv2.createTrackbar('rh', 'temp', 255, 255, nothing)
while True:
        ret,img=cap.read()  #Read from source
        hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
        bl_temp=cv2.getTrackbarPos('bl', 'temp')
        gl_temp=cv2.getTrackbarPos('gl', 'temp')
        rl_temp=cv2.getTrackbarPos('rl', 'temp')
        bh_temp=cv2.getTrackbarPos('bh', 'temp')
        gh_temp=cv2.getTrackbarPos('gh', 'temp')
        rh_temp=cv2.getTrackbarPos('rh', 'temp')
        thresh=cv2.inRange(hsv,(bl_temp,gl_temp,rl_temp),(bh_temp,gh_temp,rh_temp))
        if(cv2.waitKey(10) & 0xFF == ord('b')):
          break #break when b is pressed 
        cv2.imshow('Video', img)
        cv2.imshow('thresh', thresh)

【讨论】:

感谢您的 cmets,如果我想使用 python-c++-opencv 算法之一来获取感兴趣区域(手),您推荐哪种方法? 我使用了这段代码,它在 True 时表示语法无效。我的 python 是 3.5 和 opencv 3.1 此代码基于 OpenCV 2.4.9 构建。因此语法无效。您需要根据 OpenCV 3.x 进行修改

以上是关于哪种方法最适合寻找手势识别的感兴趣区域的主要内容,如果未能解决你的问题,请参考以下文章

手势识别的 创建 与 方法

Swift:手势识别器无法识别的选择器发送到实例

如何找到intel realsense D400系列关于手势识别的详细信息?

基于无线信号的手势识别研究现状调查

转iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) -- 不错不错

Xamarin.Forms 第23局:手势识别