【问题标题】:HoughCircles Parameters to recognise balls识别球的 HoughCircles 参数
【发布时间】:2012-07-01 20:19:57
【问题描述】:

通过将图像转换为灰度然后对其进行模糊处理后,我尝试使用以下参数应用霍夫圆变换:

  • CV_HOUGH_GRADIENT
  • dp = 1
  • min_dist = 1
  • param_1 = 70
  • param_2 = 100
  • min_radius = 0
  • max_radius = 0

这是我尝试过的众多图片之一: http://i.stack.imgur.com/JGRiM.jpg

但即使使用宽松的参数,算法也无法识别球。

(当我尝试使用在 GIMP 中创建的圆形图像时,效果很好)

【问题讨论】:

    标签: opencv hough-transform


    【解决方案1】:

    我同意克日赫的观点。 我让它毫不费力地工作:

    cv::Mat img,img2;
    std::vector<cv::Vec3f> circles;
    img = cv::imread("JGRiM.jpg",1);
    cv::bilateralFilter(img, img2, 15, 1000, 1000);
    cv::cvtColor(img2, img2,CV_BGR2GRAY);
    cv::HoughCircles(img2, circles, CV_HOUGH_GRADIENT, 1,300,50, 10);
    cv::circle(img2,cv::Point(circles[0][0],circles[0][1]),circles[0][2],cv::Scalar(126),2);
    cv::imshow("test",img2);
    
    cv::waitKey(0);
    cv::imwrite("test.jpg",img2);
    return 0;
    

    祝你好运:)

    【讨论】:

    • 您能更详细地解释一下如何得出您的数字吗?我正在尝试做类似的事情,并想弄清楚如何计算最佳数字以适合我的解决方案。谢谢!
    • minDist = 300(px) 这样我们就只能找到一个圆(一个小的值会在球周围找到多个圆)。 minRad =10 所以我们避免计算小圆圈(噪音)。对于其他参数,我很幸运 :p(尽管这张图片对更改非常稳健)
    • 谢谢!这很有帮助。双边滤波器呢?我一直试图在更多外行的讲话中找到对参数的良好解释。对此有何建议?
    【解决方案2】:

    首先检查图像的 Canny 输出。从这个 Canny 输出中,可以检测到具有非常小的 param_2 的球以及图像上的许多假圆。 (我使用了例如 param_2 = 10,并使用指定的球心来消除错误的圆圈)

    尝试帮助霍夫圆变换。任务是将球从其他元素中分割出来。在您的图像问题是线,您可以尝试使用颜色分割球。

    【讨论】:

    • 您能进一步解释一下您的方法吗? (如何提供指定的球心)。如果我在图像中间有一个球,占据了画面的 60% 到 70%。我将如何确定最佳参数?
    • 您可以检测到所有具有非常低的 param_2 的圆圈。那会给你很多错误的圈子。然后,如果您大约知道该中心。你可以进行消除。只需遍历所有圆并删除它与指定中心近似值的距离大于某个增量。
    • 啊,聪明!是的,这实际上很有帮助。
    猜你喜欢
    • 2016-07-14
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多