HoughCircles用于识别球的参数

use*_*372 6 opencv hough-transform

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

  • 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中创建的圆圈图像尝试它时效果很好)

Que*_*ann 9

我同意krzych.我让它毫不费力地工作:

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;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

祝好运 :)

  • minDist = 300(px),这样我们只能找到一个圆圈(一个小值会在球周围找到多个圆圈).minRad = 10所以我们避免计算小圆圈(噪音).对于其他参数,我很幸运:p(这个图像虽然变化非常强大) (4认同)

krz*_*ych 0

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

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

  • 您可以检测 param_2 非常低的所有圆圈。这会给你带来很多错误的圆圈。那么如果您大致了解该中心。可以做排除法。只需迭代所有圆并删除到指定中心近似值的距离大于某个增量的圆即可。 (2认同)