3

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

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

4

2 回答 2

3

就像 sinelaw 所说,一般来说,没有直接、简单的解决方案。

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

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

凸面缺陷

  • 上图来自OpenCV API功能描述cvConvexityDefects。去阅读它的描述来了解它是如何使用的。
  • 一旦你有了凸包,检查缺陷的大小。其中 4 个应该大致相同(因为手指的长度相同)。如果是这样的话,你的手牌就给了你一个高五。
于 2011-01-31T13:48:13.610 回答
1

请参阅我对这个问题的回答- 没有直接、简单的解决方案。

于 2011-01-31T11:42:52.347 回答