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

时间:2016-05-05 20:44:10

标签: opencv classification gesture feature-extraction roi

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

谢谢大家抽出时间

1 个答案:

答案 0 :(得分:0)

您可以从基于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)