二值图像上的霍夫圆

Hough Circle on binary images

我正在尝试创建一个总能找到我的 3 个彩球的通用函数。 (红色、黄色和白色)。我花了很多时间来寻找解决方案,这很难...... 目前,首先,我使用 Canny 过滤器(我使用 Otsu 方法确定较低和较高参数),然后通过递增 param2 调用 Hough Circle 方法,直到找到 3 个圆。

while (!findCircles){
    Imgproc.HoughCircles(hough, circles, Imgproc.CV_HOUGH_GRADIENT, 1, 100, 200, low, 20, 100); //find3Circles = true;  
    if (circles.cols() == 3){
        findCircles = true;
    }       
    low++;
 }

效果不是很好...

如果有人为我的问题投票,我可以 post 图片(我没有足够的分数...)如果有人找到解决方案,请告诉我。

我认为你的方法应该基于寻找颜色,而不是形状,或者至少你应该先寻找颜色,然后再寻找形状。 Here 有一篇很好的文章(它使用旧的 OpenCV API,但其他一切都很好)描述了如何在 OpenCV 中执行基于颜色的对象跟踪。总体思路很简单 - 将图像转换为 HSV 颜色 space,使用 inRange 函数查找可能是你的对象的像素然后跟踪它们(很可能你将不得不过滤像素 - 找到最大的轮廓或形状的轮廓接近于圆)。请注意,您需要调用 inRange 函数 3 次(每个球一次)。