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