matlab与opencv cpp中的霍夫变换

Posted

技术标签:

【中文标题】matlab与opencv cpp中的霍夫变换【英文标题】:Hough transform in matlab vs opencv cpp 【发布时间】:2016-08-21 08:03:11 【问题描述】:

我有以下图片: 当我在 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】:

如果输出作为霍夫圆的输入有意义,还可以查看中值模糊的输出。您的 20 个参数是最小中心距离。当圆圈更近时。阿尔格可能会失败。此外,您正在使用 30,30 个参数,这些参数看起来像传递给 canny() 边缘检测的阈值,它们是第一阈值和第二阈值。同样,这也是此阈值的问题.. 如果您不了解参数,请使用文档中的示例并仅更新明确的参数。在此示例中,您尝试查找的对象仅持续 2 最小和最大半径。

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

【讨论】:

嗨...当您将 0 写为最大值和最小值时,就像您写不在乎...相同的参数适用于不同的图片,所以我认为这不是问题。 OK 有道理。我更新了帖子,代码只是说如果有 0 0 将 max 设置为 max of(cols,rows) 并将最小半径设置为 0

以上是关于matlab与opencv cpp中的霍夫变换的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV中的霍夫线变换概率霍夫线变换

OpenCV中的霍夫线变换和霍夫圆变换

『OpenCV3』霍夫变换

OpenCV笔记整理霍夫变换

学习 opencv---(13)opencv霍夫变换:霍夫线变换,霍夫圆变换

霍夫变换和openCV