霍夫变换在opencv中失败了

时间:2016-11-30 09:28:43

标签: opencv image-processing

enter image description here

这是上面的图片。我正在使用opencv来处理它,我试图使用Hough变换,但失败了。另外,我发现在Hough变换中设置相关参数非常困难。

代码如下:

#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
    Mat srcImg = imread("srccenter.bmp");
    Mat greyImg;
    cvtColor(srcImg, greyImg, COLOR_BGR2GRAY);

    std::vector<cv::Vec3f> circles;

    /// Apply the Hough Transform to find the circles
    HoughCircles(greyImg, circles, CV_HOUGH_GRADIENT, 1, 10, 100, 20, 0,   0);

    /// Draw the circles detected
    for (size_t i = 0; i < circles.size(); i++)
    {
        Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
        int radius = cvRound(circles[i][2]);
        circle(srcImg, center, 3, Scalar(0, 255, 255), -1);
        circle(srcImg, center, radius, Scalar(0, 255, 0), 1);
    }

    namedWindow("srcImg", WINDOW_NORMAL);
    imshow("srcImg", srcImg);
    waitKey(0);
    return 0;
 }

但结果是我无法检测到任何圆圈。

我如何检测内圈?

你有什么好主意吗?

1 个答案:

答案 0 :(得分:1)

您需要将min_dist参数更改为零。此参数用于检测到的中心之间的最小距离。在你的情况下,圆圈的中心是如此接近。 此外,您必须更改Canny边缘检测器的参数param_1。