红色轮廓几乎相同;只是一个小小的。
我尝试使用cv :: SimpleBlobDetector,但是不可能通过传递类似的轮廓来帮助检测。我尝试使用区域过滤器,但不是决定性的。
你有什么想法吗?
提前致谢
答案 0 :(得分:0)
一种疯狂的方法是分别分析每个轮廓。由于轮廓以不同的角度旋转,我们必须使用任何常见的可遵循规则正确定位它们:
说,横向最宽的部分。
这可以使用minAreaRect函数来完成,该函数将轮廓与旋转的矩形区分开来。您可以找到其中一个最长边的斜率,然后根据我们的规则进行旋转变换。
现在你有了一系列遵循我们规则的轮廓图像,即。最宽的部分是水平的。
比较两个轮廓图像的相似度,如A和B, 计算,
differences1=(A-B)
differences2=(B-A)
differences=differences1 + differences2
或者您可以在一行中完成。这是有效的,因为OpenCV将所有负值更改为0,所有大于255的值将为255。
然后找到图像命名差异的每个像素的总和。值越小,轮廓越相似。或者您使用任何更有效的参数来比较图像。PS:您说使用区域作为功能并未给出可接受的结果。您是否尝试同时使用区域和周边?如果做得好,请忘记上一段文字。
祝你好运!