获取图像中检测到的圆的中心/opencv/c++

Posted

技术标签:

【中文标题】获取图像中检测到的圆的中心/opencv/c++【英文标题】:get the center of the detected circle in an image / 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 函数后的:

【问题讨论】:

【参考方案1】:

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

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

行没有给出正确的输出。

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

尝试使用:

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

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

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

【讨论】:

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

以上是关于获取图像中检测到的圆的中心/opencv/c++的主要内容,如果未能解决你的问题,请参考以下文章

霍夫圆检测 opencv

如何从图像中裁剪出检测到的对象(圆圈)并存储它?

Swift 中的圆 - 无法摆脱剪裁

如何用opencv检测模糊圆的中心

Opencv c ++检测并裁剪图像上的白色区域

霍夫圆检测