【问题标题】:Can HoughCircles function in opencv detect circles within a circle?opencv中的HoughCircles函数可以检测圆圈内的圆圈吗?
【发布时间】:2012-08-09 14:11:01
【问题描述】:

我在 OpenCV 中遇到了用于圆形检测的 HoughCircles。但它有一个参数指定检测到的圆圈之间的最小距离。我担心的是,如果两个圆圈是同心的,即一个圆圈内另一个圆圈,这会起作用吗?

谢谢 沙申克

【问题讨论】:

    标签: opencv


    【解决方案1】:

    如果两个圆的中心相距足够远,霍夫变换只会返回两个圆作为两个不同的对象(Hough 的第五个参数)。
    所以我认为以这种方式检测同心圆是不可能的(因为它们的中心是相同的,或者非常接近)。

    我看到如何使用 Hough 变换的唯一方法是了解您正在寻找的圆的半径,并在具有不同最小和最大半径的循环中调用 Hough(最后一个和下一个到Hough的最后一个参数),每个半径迭代对应于你的同心圆之一。

    【讨论】:

    • 伟大的直觉!!
    【解决方案2】:

    我尝试了显示的图像

    但它只检测到一个圆圈...这是代码

    Mat image_ = imread("E:/Work_DataBase/circle.jpg",3);
    Mat image_temp;
    cvtColor( image_, image_temp, CV_BGR2GRAY );
    vector<Vec3f> circles;
    HoughCircles( image_temp, circles, CV_HOUGH_GRADIENT, 1, image_temp.rows/8,100, 100, 10, 200 );
    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 center
        circle( image_, center, 3, Scalar(0,255,0), -1, 8, 0 );
       // circle outline
        circle( image_, center, radius, Scalar(0,0,255), 3, 8, 0 );
    }
    imshow("circles",image_);
    waitKey(0);
    

    如果我找到任何替代方案,我会尝试其他选项,我会更新你。

    【讨论】:

      【解决方案3】:

      我还认为 OpenCv HougCircles 每个中心只检测一个半径。 如果要检测更多半径,则必须指定中心之间更小的最小距离。但是那些不是同心圆。 简而言之,我认为 openCv HoughCircle 模块并不是为了迎合同心圆而设计的。

      【讨论】:

        【解决方案4】:

        我过去使用的另一种解决方案是在循环中调用cv2.HoughCircles 函数,但将找到的圆圈区域替换为附近像素的颜色。

        我知道这并不总是可行的,但这取决于应用程序。

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-30
        • 1970-01-01
        相关资源
        最近更新 更多