在暗图像中找到类似的轮廓

时间:2018-06-08 15:16:34

标签: c++ opencv opencv3.0

我正在寻找一种检测此图片中特定轮廓(边界)的方法: enter image description here

我已经检测到类似的轮廓(用红色绘制)并想检测最近的轮廓。 enter image description here

红色轮廓几乎相同;只是一个小小的。

我尝试使用cv :: SimpleBlobDetector,但是不可能通过传递类似的轮廓来帮助检测。我尝试使用区域过滤器,但不是决定性的。

你有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

一种疯狂的方法是分别分析每个轮廓。由于轮廓以不同的角度旋转,我们必须使用任何常见的可遵循规则正确定位它们:

说,横向最宽的部分。

这可以使用minAreaRect函数来完成,该函数将轮廓与旋转的矩形区分开来。您可以找到其中一个最长边的斜率,然后根据我们的规则进行旋转变换。

现在你有了一系列遵循我们规则的轮廓图像,即。最宽的部分是水平的。

比较两个轮廓图像的相似度,如A和B, 计算,

differences1=(A-B)
differences2=(B-A)
differences=differences1 + differences2

或者您可以在一行中完成。这是有效的,因为OpenCV将所有负值更改为0,所有大于255的值将为255。

然后找到图像命名差异的每个像素的总和。值越小,轮廓越相似。或者您使用任何更有效的参数来比较图像。

PS:您说使用区域作为功能并未给出可接受的结果。您是否尝试同时使用区域和周边?如果做得好,请忘记上一段文字。

祝你好运!