我目前正在尝试使用 OpenCV 检测箭头及其方向。 我已经完成了工作正常的轮廓检测过程,但我的问题出在形状匹配方面。
我尝试在 OpenCV 中使用 matchShapes 函数,但结果似乎很糟糕。 我使用一个简单的模板图像和一个处理过的图像(通常是一张照片,但为了测试我使用了一个简单的图像)
模板图片:
处理过的图像:
使用这两个,matchShapes 告诉我左边的正方形看起来更像图像上的箭头的模板。 我不知道这是从哪里来的。
matchShapes 对于这种用途来说是一个不好的函数吗?有人告诉我使用 SIFT 算法,但对于这样一个简单的形状,它是不是有点矫枉过正?
谢谢,
最佳答案
我会尝试使用 Image moment找到形状。为此,您必须找到图像区域的不同属性。最好的是想将图像二值化。 首先,我会告诉您一些描述形状的技巧,它们不必对图像时刻做任何事情。
首先是形状的周长/周长。计算您需要对形状的所有 contur 元素的长度求和的周长。接下来可以计算形状的面积,您可以计算像素或采用鞋带距离,如 in this post .使用周长和面积,可以计算出 circularity物体/形状。更详细地说,您可以创建一个边界框和它的凸包。最后但并非最不重要的一点是,形状具有重心。这些是您可以构建自己的特征向量的一些属性,但您必须有点创意。或者您可以使用图像时刻。
我不确定 OpenCV 中是否存在图像矩,最好和最稳健的矩是 hu 矩。我在 stackoverflow 中发现了一些解释:Meaning of the seven Hu invariant moments function from OpenCV . Hu momenter 对旋转、平移和缩放具有鲁棒性。非常适合您的问题。
关于c++ - 使用 OpenCV 进行箭头形状检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24039454/