有没有办法使用opencv检测图像中的相邻圆

时间:2016-03-22 12:24:03

标签: c++ opencv

我正在尝试检测图像中的相邻圆圈。这些可以是4或5.有没有办法在opencv中检测它。我尝试了很多方法,包括霍夫圈法。但我也在考虑额外的圈子。如果在任何情况下我都能检测到圆圈,那么相同的参数将无法与其他图像一起使用。

请告诉我任何可能达到此目的的事情。

使用Hough Circles的代码是:

Mat img, gray;
img = imread("/Users/Development/Desktop/Images/IMG_0297.jpg");
cvtColor(img, gray, CV_BGR2GRAY);
// smooth it, otherwise a lot of false circles may be detected
GaussianBlur( gray, gray, Size(9, 9), 2, 2 );
vector<Vec3f> circles;
HoughCircles(gray, circles, CV_HOUGH_GRADIENT, 2, gray.rows/16,80,100,30,50 );
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]);
    // draw the circle center
    circle( img, center, 3, Scalar(0,255,0), -1, 8, 0 );
    // draw the circle outline
    circle( img, center, radius, Scalar(0,0,255), 3, 8, 0 );
}
namedWindow( "circles", 1 );
imshow( "circles", img );
waitKey(0);
return 0;

示例图片是 enter image description here

我希望检测此处的拨号,它们是彼此相邻的

1 个答案:

答案 0 :(得分:0)

例如,您可以对圆圈进行倒角匹配,然后检查圆圈是否与另一个圆圈共享边缘,或者是否使用边缘检测和图像扫描接近它,以查看圆圈是否足够接近或不相邻。

使用此特定图像,您可以执行kmeans和连接组件。然后倒角匹配圆圈,看看连接的组件是否由多个圆圈组成。

相关问题