如何将霍夫圆法应用于阈值图像?

How can I apply the hough circle method to a thresholded image?

我目前有一个程序可以使用 openCV 检测彩球,我想添加 HoughCircle 方法以使其更好。

我想在从 inRange 方法获得的阈值图像上应用 HoughCircle 方法,但不幸的是它不起作用。 我看到HoughCircle方法只拍灰度图,有没有办法将阈值图像传递给它?

我就是这样做的:

int isBall(Mat threshold){
    Mat temp;
    threshold.copyTo(temp);
    std::vector<Vec3f> circles;
    HoughCircles(temp, circles, CV_HOUGH_GRADIENT, 1, temp.rows/8 
                                                    , 100
                                                    , 50 
                                                    , 15 /* min radius */
                                                    , 200 /* max radius */
                                                    );
    printf("nb circles = %d\n", circles.size());
    if(circles.size() > 0){
        return 1;
    }
    return 0;

}

阈值图像来自:

inRange(HSV,Scalar(H_MIN,S_MIN,V_MIN),Scalar(H_MAX,S_MAX,V_MAX),threshold);

这是我可以获得的阈值图像示例: https://www.noelshack.com/2019-39-5-1569586501-threshold.png

在此先感谢您的帮助。

您遇到的问题与HoughCircles中使用的参数有关。如果将示例图像转换为灰度图像,则可以很好地使用示例图像。

罪魁祸首是param2=50,也就是一个threshold for circle centers at detection stage。如果将它设置为较小的值,算法将能够return 圆。

我已经使用 param2=10 测试了 HoughCircles(),结果是这样的: