6

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

  • CV_HOUGH_GRADIENT
  • dp = 1
  • min_dist = 1
  • 参数_1 = 70
  • 参数_2 = 100
  • min_radius = 0
  • 最大半径 = 0

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

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

(当我尝试使用在 GIMP 中创建的圆圈图像时,它工作正常)

4

2 回答 2

9

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

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;

在此处输入图像描述

祝你好运 :)

于 2012-06-30T19:47:18.043 回答
0

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

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

于 2012-06-30T19:37:50.730 回答