HoughCircles可以在opencv中检测圆圈内的圆圈吗?

时间:2012-08-09 14:11:02

标签: opencv

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

由于 沙善

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我尝试使用显示的图片Concentric circles

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

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);

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

答案 2 :(得分:1)

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