【发布时间】:2019-04-10 22:06:08
【问题描述】:
我有这样的图像:
我需要在暗区设置一个椭圆(注意:必须是椭圆,而不是圆形)。在 OpenCV 中执行此操作的最佳方法是什么?到目前为止,我的第一步是对其应用自适应 (Otsu) 阈值,结果是:
但我不知道从那里去哪里。我正在用 Python 编写应用程序,但它更像是我正在寻找的算法设计。
根据回复/评论进行编辑:
好的,所以我已经尝试了形态学。基于OpenCV documentation,我对其进行了3次迭代“关闭”操作(膨胀,然后腐蚀)以去除小颗粒,结果是:
然后,为了将其扩展回更接近原始形状,我进行了 3 次迭代“打开”操作(腐蚀,然后膨胀),结果是:
从这里开始,我做了 Canny 边缘检测,结果是:
现在,我在上面使用了findContours,但遇到了问题。它沿着边缘发现了几十个轮廓,每一个都是沿着圆周的一小段。这意味着,即使我采用最大尺寸轮廓,它也可能只代表周长的 10%,这不足以准确拟合椭圆。这就是为什么@Demi-Lune 提出的其他问题对我不起作用的原因;它们都有非常干净、锐利的边缘,findContours 找到了一个很好的单一轮廓,覆盖了每个形状的整个周边,但对于我的混乱图像来说,这不会发生。那么,从这里拟合椭圆的最佳方法是什么?
【问题讨论】:
-
@Demi-Lune 查看我在问题中的编辑。基本上,这些问题的形状很干净,边缘清晰,
findContours为这些问题找到了很好的单一轮廓;这不适用于我的杂乱图像。 -
找到黑点的minarerect..它代表你的椭圆
-
只有在圆圈外没有多余的点的情况下才有效,对吧?这就是这个特定图像的情况,但不是普遍的(我处理的一些图像可能在圆圈外到处都有奇怪的点,即使在形态学之后)。此外,如果圆的一侧“变平”(因此看起来更像“D”),则它不会适合最好的椭圆,它会适合更小的椭圆。
-
#1 正确,#2“最佳”是根据度量标准...“最小二乘误差”和“与边界点有更多重叠”产生不同的结果
标签: python opencv computer-vision