在matlab和opencv cpp中的Hough变换

时间:2016-08-21 08:03:11

标签: c++ matlab opencv hough-transform

我有以下图片:

当我在MATLAB中使用霍夫变换时,我得到了100%的圆圈检测。

我在MATLAB中使用以下代码:

[centersDark, radiiDark] = imfindcircles(closed_pic,[Rmin Rmax],'ObjectPolarity','dark');

我在cpp中使用以下代码:

cv::medianBlur(mat, mat, 5);    
cv::Mat grayMat;     
cv::cvtColor(mat, grayMat, cv::COLOR_BGR2GRAY);     
std::vector<cv::Vec3f> circles1;     
cv::HoughCircles(grayMat, circles1, CV_HOUGH_GRADIENT, 1, 20, 30, 30, 0, 0); 

此外,当我尝试在二进制图像上运行cpp中的hough transforn时,我没有得到任何检测。我能做些什么才能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

如果输出有意义作为霍夫圆的输入,那么看一下参数也看看输出中值模糊。你的20个参数是最小中心距离。当圆圈更近时。 Alg可能会失败。您还使用了30,30个参数,这些参数看起来像是传递给canny()边缘检测的阈值,它们是第一个和第二个阈值。同样这也是这个阈值的问题.. 如果你没有找不到参数,请使用文档中的示例并仅更新clear参数..在这个示例中,只有最后2个Min和Max半径的对象,您尝试查找...

 HoughCircles(gray, circles, CV_HOUGH_GRADIENT,
             2, gray->rows/4, 200, 100 );