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

在这种特定情况下,霍夫圆变换可能是最简单的解决方案.
复制教程中的代码并将参数更改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().
一个选项有点hacky:在findContours之上使用minEnclosingCircle并按min过滤轮廓.基于阈值包围半径(移除小于半径A(移除微小的斑点)并且大于半径B(移除巨大的斑点)).你也可以试试minAreaRect并检查宽度/高度比来寻找均匀的斑点而不是高/宽斑点.
不太常见的解决方案是使用Hough变换.看看霍夫圈和教程
| 归档时间: |
|
| 查看次数: |
2851 次 |
| 最近记录: |