使用OpenCV检测箭头形状

时间:2014-06-04 13:57:20

标签: c++ opencv image-processing shape

我目前正在尝试使用OpenCV检测箭头及其方向。 我已经完成了轮廓检测过程,但是我的问题在于形状匹配方面。

我尝试在OpenCV中使用matchShapes函数,但我的结果似乎非常糟糕。 我使用一个简单的模板图像和一个处理过的图像(通常是一张照片,但测试我使用了一个简单的图像)

模板图片:

Template Image

已处理的图片:

enter image description here

使用这两个,matchShapes告诉我左边的方块看起来更像是图像上箭头的模板。 我不知道这是从哪里来的。

matchShapes是否适合此用途?有人告诉我使用SIFT算法,但这样一个简单的形状是不是有点矫枉过正?

谢谢,

2 个答案:

答案 0 :(得分:1)

我会尝试使用Image moment找到形状。为此,您必须找到图像区域的不同属性。最好的是想要将图像二值化。 首先,我告诉你一些技巧来描述他们不必对形象时刻做些什么的形状。

首先会有形状的周长/周长。计算所需的周长,以总计形状的所有轮廓元素的长度。接下来可以计算形状的面积,您可以计算像素或像in this post那样计算鞋带距离。通过周长和面积,可以计算物体/形状的circularity。更详细的是,您可以创建它的边界框和凸包。最后不是但并非最不重要的是形状具有重心。这是一些属性,你可以建立自己的特征向量,但你必须有点创意。或者你可以使用图像时刻。

我不确定OpenCV中是否存在Image时刻,最好和最强大的时刻是胡子时刻。我在stackoverflow中找到了一些explenation:Meaning of the seven Hu invariant moments function from OpenCV。胡时刻对旋转,翻译和规模都很强大。非常适合您的问题。

答案 1 :(得分:0)

最后,我使用SURF算法,因为我想找到更复杂的对象;)