3

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

谢谢沙尚克

4

4 回答 4

3

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

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

于 2017-03-22T12:16:02.990 回答
1

我尝试使用显示的图像同心圆

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

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

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

于 2012-08-09T18:40:53.467 回答
1

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

于 2017-03-22T10:54:36.713 回答
0

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

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

于 2021-12-11T11:32:41.057 回答