如何删除错误检测?

Shi*_*iyu 6 opencv image-processing

我正在使用OpenCV来检测二进制图像中的椭圆,如下所示.在图像中,有八个椭圆被检测.我可以使用findContours获得很多轮廓,包括八个椭圆.问题是:我怎样判断哪一个是椭圆哪一个不是?如何删除所有其他错误检测?

在此输入图像描述 在此输入图像描述

kar*_*lip 7

在这种特定情况下,霍夫圆变换可能是最简单的解决方案.

复制教程中的代码并将参数更改cv::HoughCircles()为:

/// Apply the Hough Transform to find the circles
HoughCircles( src_gray, circles, CV_HOUGH_GRADIENT, 1, 10, 40, 30, 0, 0 );
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

但我喜欢@George的想法,顺其自然,它比指定硬编码常量更强大.我的方法适用于此图像,但如果你有不同大小的圆圈和东西的图像,你想使用cv::minEnclosingCircle().


Geo*_*nza 6

一个选项有点hacky:在findContours之上使用minEnclosingCircle并按min过滤轮廓.基于阈值包围半径(移除小于半径A(移除微小的斑点)并且大于半径B(移除巨大的斑点)).你也可以试试minAreaRect并检查宽度/高度比来寻找均匀的斑点而不是高/宽斑点.

不太常见的解决方案是使用Hough变换.看看霍夫圈和教程