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

时间:2015-05-25 12:02:06

标签: python opencv image-processing feature-detection

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

使用OpenCV会导致一些麻烦,例如openCV检测不到轮廓,但检测到一些小的分离线(轮廓)。 如果椭圆带有"虚线边框"我需要它作为单个轮廓,而不是分离的对象。

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

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

带有实线边框的椭圆

enter image description here

带虚线边框的椭圆:

enter image description here

2 个答案:

答案 0 :(得分:5)

Hough transform不应该有虚线或实线边框或其混合的任何问题。我用它来检测我的一个项目中的虚线,省略号应该不会太难。

默认情况下,OpenCV仅实现circlesstraight lines的Hough变换,但有blog entry代码,其中包含如何使其适应椭圆形状的代码。

答案 1 :(得分:0)

更好的想法是使用特定的变换来检测圆和椭圆而不是一般的"查找轮廓"调用

我不熟悉OpenCV,知道是否存在这种检测 - 应该是。

互联网搜索更通用的图像椭圆检测"显示它不是一个固定的问题 - 不像方形和矩形检测,所以无论OpenCV已经包含什么,都必须进行调整。 (基本思想是基础算法创建一个新的n维空间,其中可以表示目标图像的每个可能的参数化椭圆(例如,每个x和y中心坐标的轴,w和h半径,以及一个用于旋转),并根据目标图像中的像素对比度填充此矩阵中的命中数。) - 塞巴斯蒂安的答案为这种方法提出了正确的名称我记不起来了:"霍夫变换&#34 ;,并提供有关其工作方式的必要链接,以及如何在OpenCV上扩展它。