使用OpenCV比较两个图像

时间:2011-01-31 11:34:02

标签: c++ opencv image-comparison

我想使用OpenCV比较两个图像。我可以在其他训练数据集中过滤最近的匹配结果吗? 示例:包含训练图像的数据库,单手显示数字5。

是否可以匹配其他人,与该训练图像相同的标志..? 使用OpenCV。请帮帮我。

2 个答案:

答案 0 :(得分:3)

正如sinelaw所说,没有直接的,简单的解决方案一般

但是,我可以想到一种适用于特定示例的简单方法。

  • 检测图像中与人体皮肤相对应的区域。这是假设该人没有戴手套(如果他们是,知道手套的颜色会有帮助)。有关皮肤检测的信息,请参阅this example。基本上,您使用色度将图像转换为YUV和阈值,因为众所周知,无论种族如何,人类皮肤仅占色度谱的一小部分
  • 检测轮廓。在OpenCV中,这是使用cvFindContours函数完成的。这是用于查找省略号的example函数。你对任何形状的轮廓感兴趣,而不仅仅是椭圆形。
  • 现在,仔细检查所有轮廓,然后寻找一个看起来像张开手的轮廓来制作5个信号。这并不像听起来那么难,因为你是一个凸出的船体(红色轮廓),有4-5个凸起缺陷(黑色箭头):

convexity defects

  • 上图来自cvConvexityDefects {{1}}功能的描述。请阅读其说明,了解有关如何使用的信息。
  • 一旦有了凸包,检查缺陷的大小。其中4个应大致相同(因为手指的长度相同)。如果是这样的话,你可以用张开的手给你一个高五。

答案 1 :(得分:1)

请参阅我对this question的回答 - 没有直接,简单的解决方案。