哪种方法最适合寻找手势识别的感兴趣区域
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 进行修改以上是关于哪种方法最适合寻找手势识别的感兴趣区域的主要内容,如果未能解决你的问题,请参考以下文章
如何找到intel realsense D400系列关于手势识别的详细信息?