OpenCV检测手和比较图像

时间:2015-03-13 14:15:45

标签: android c++ opencv

我的应用程序的目的是拍摄照片(手势)并将其与数据库中的图片进行比较。我使用的第一个选项是图像上的背景减法:

http://docs.opencv.org/trunk/doc/tutorials/video/background_subtraction/background_subtraction.html

解决方案有效,但有时候,根据第一张图片没有正确切割。

第二个选项是检测肤色:http://bytefish.de/blog/opencv/skin_color_thresholding/

或者使用基于xml文件的手检测更好吗?要比较我想要使用此方法的图像:http://docs.opencv.org/doc/tutorials/imgproc/histograms/histogram_comparison/histogram_comparison.html

让我提醒您,我正在谈论比较他们手势的图像。我还读到有关使直方图不仅仅是照片主题上的整个图像的可能性,然后数据更可靠,但不知道如何去做。

我想将手势比作单个图像,我不是指这些序列。 1张图片与基线进行比较。手势检测是指某人,例如。会响,现在我会有例如。 5秒钟拍照并将它们与底座进行比较,因为我不确定是否出现在手的镜头中。除非有另一种解决方案。

最终,它是两个图像的比较,其中会有一些手势。

1 个答案:

答案 0 :(得分:1)

如果您的目标是执行手势识别,则应考虑手势是图像序列。 因此,如果你想比较手势,你必须找到一个" smart"比较整个序列而不是单个图像的方法,因为一个帧可以属于不同的手势。

用于手势识别的现有技术方法涉及在两个连续帧之间提取光流,然后计算光流(HOF)的直方图。计算了视频序列中所有帧对的直方图后,您可以使用不同的策略来比较手势:

  • 您可以连接序列中的所有HOF,然后执行直方图交叉来比较两个序列
  • 您可以使用 Bag of Word范例来创建HOF的表示

这里有一些指向这些策略的指示:

  • Optical Flow
  • 您可以查看本文以提取HOF:"定向光流和Binet-Cauchy核的直方图 用于识别人类行为的非线性动力系统" [字袋]
  • Bag of Words

但是,如果您的应用只需要两个图像之间的比较,我建议为每个图像提取梯度直方图(HOG),然后将它们与直方图交点度量进行比较,或者再次,使用Bag of words范例(如果您正在寻找更高级别的图像表示,那就更好了)。 HOG在OpenCv库link

中提供