使用 OpenCV 和 Python 检测图像上不同种类的圆形和椭圆形

Detect different kinds of circles and ovals on the image using OpenCV and Python

我需要检测图像上的不同形状,例如带有虚线边框的椭圆和圆。

使用 OpenCV 会带来一些麻烦,例如openCV 检测的不是轮廓,而是一定量的小分隔线(轮廓)。 如果是带 "dashed-border" 的椭圆,我需要它是单个轮廓,而不是分离的对象。

你有什么建议来解决这个问题?

我还需要识别带实线边框的椭圆(或圆)和带虚线边框的椭圆(圆)

实心椭圆

带虚线边框的椭圆:

更好的想法是使用特定的变换来检测圆和椭圆,而不是一般的 "find contour" 调用。

我对 OpenCV 不够熟悉,不知道是否内置了这种检测 - 应该是。

在互联网上搜索更通用的 "image ellipse detection" 表明它不是一个固定的问题 - 与方形和矩形检测不同,因此无论 OpenCV 已经包含什么都必须进行调整。 (基本思想是底层算法创建一个新的 n 维 space,其中可以表示目标图像的每个可能的参数化椭圆(例如,每个 x 和 y 中心坐标的轴,w 和h 半径,一个用于旋转),并根据目标图像中的像素对比度填写此矩阵中的命中)。-塞巴斯蒂安的回答为我不记得的这种方法提供了正确的名称:"Hough transform",并提供有关其工作原理以及如何在 OpenCV 上扩展它的所需链接。

Hough transform 应该不会对虚线或实线边框或混合边框有任何问题。我用它来检测我的一个项目中的虚线,椭圆应该不会更难。

默认情况下,OpenCV 仅实现 circles and straight lines but there is a blog entry 的 Hough 变换,并提供有关如何使其适应椭圆形状的代码。