【问题标题】:get the center of the detected circle in an image / opencv / c++获取图像中检测到的圆的中心/opencv/c++
【发布时间】:2013-11-18 08:30:00
【问题描述】:

我正在使用此代码来获取图像中检测到的圆心的坐标。

vector<Vec3f> circles;

    cv::HoughCircles( t, circles, CV_HOUGH_GRADIENT, 1, t.rows/8, 200,         100, 0, 0 );

       for( size_t i = 0; i < circles.size(); i++ ){
            Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
            cout << "center" << center << endl;
        int radius = cvRound(circles[i][2]);
            // circle center
            circle( t2, center, 3,  1 , -1, 8, 0 );        
             // circle outline
            circle( t2, center, radius,  1  , 3, 8, 0 );  
        }

        imshow( "circles", t2 );

我可以检测到圆圈,但没有得到任何中心点坐标的结果:(

提前致谢。

改版后:

我添加了这一行,但答案为零。

cout << "number of circles found: " << circles.size() << endl;

图片: 第一个是主圆,第二个是应用高斯滤波器和 HoughCircles 函数后的:

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    如果我理解正确,您的代码会绘制圆圈,但

     cout << "center" << center << endl;
    

    行没有给出正确的输出。

    这是因为cv::Point 不支持通过&lt;&lt; 直接输出。

    尝试使用:

     cout << "center" << center.x << ", " << center.y << endl;
    

    如果问题是您找不到任何圈子,请确保正确选择了 min_radiusmax_radius。尝试从大范围的允许半径开始,然后尝试选择较小的范围,直到只得到所需的圆。

    这个值可以对检测率产生巨大的影响。

    【讨论】:

    • 感谢您的积分。看来我还没有检测到圈子呢!我在我的代码中添加了一行以检查是否检测到某些东西..答案为零..请考虑编辑后的帖子。
    • 如果您没有得到任何圆圈但没有错误,请尝试将最小/最大半径设置为其他值。查看我编辑的答案。
    • 我尝试了不同的数字,但仍然没有结果!我应该通过反复试验找到正确的半径吗?
    • 您可以在输入图像中粗略测量它。这些值在Pixel 中,因此您只需计算输入中的半径并添加 +/- 10% 即可获得最小和最大半径的值。
    • 如果您在问题中添加图像也会有所帮助。也许霍夫是完成您的任务的完全错误的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    相关资源
    最近更新 更多