c++ - 使用 OpenCV 进行箭头形状检测

标签 c++ opencv image-processing shapes

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

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

模板图片:

Template Image

处理过的图像:

enter image description here

使用这两个,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/

相关文章:

c++ - 为什么选择非常量版本而不是类的 const 版本?

C++ 对局部变量的引用与对参数的引用

c++ - DLL 是完全加载还是只加载部分功能?

c++ - Gstreamer - 将命令行 gst-launch 转换为 C 代码

image-processing - 将YUV4:4:4转换为YUV4:2:2图像

c++ - 尝试使用 QQmlListProperty 时出现 Qt 编译器错误

java - OpenCV Android(java)字符检测和字体识别

python - 从特征点检测返回图像中的匹配值

python - PyExifTool 是否有一种将元数据写入图像的方法?

matlab - 如何使用 MATLAB 在卡车中查找木材?