2017-11-25 27 views
0

こんにちは私は次の画像のすべての円を見つけようとしています。OpenCV C++:画像内のすべての円を見つける方法

static void findCircles2(const Mat& image) 
 
{ 
 
\t vector<Vec3f> circles; 
 
\t int thresh1 = 5; 
 
    Mat pyr, timg, gray0(image.size(), CV_8U), gray; 
 
    pyrDown(image, pyr, Size(image.cols/2, image.rows/2)); 
 
    pyrUp(pyr, timg, image.size()); 
 
\t for(int c = 0; c < 3; c++) 
 
    { 
 
     int ch[] = {c, 0}; 
 
     mixChannels(&timg, 1, &gray0, 1, ch, 1); 
 
     Canny(gray0, gray, 0, thresh1, 5); 
 
     //dilate(gray, gray, Mat(), Point(-1,-1)); 
 
     gray = gray0 >= (1)*255/N; 
 
\t \t gray = gray0 >= (2)*255/N; 
 
\t \t gray = gray0 >= (6)*255/N; 
 
\t \t namedWindow("Hough Circle Transform Demo 1", CV_WINDOW_AUTOSIZE); 
 
\t \t imshow("Hough Circle Transform Demo 1", gray); 
 
\t \t waitKey(0); 
 

 
\t \t HoughCircles(gray, circles, CV_HOUGH_GRADIENT, 1, gray.rows/8, 200, 100, 0, 0); 
 
\t \t cout<<"size of circles: "<<circles.size()<<endl; 
 
\t \t for(size_t i = 0; i < circles.size(); i++) 
 
\t \t { 
 
\t \t \t Point center(cvRound(circles[i][0]), cvRound(circles[i][1])); 
 
\t \t \t int radius = cvRound(circles[i][2]); 
 
\t \t \t circle(gray, center, 3, Scalar(0,255,0), -1, 8, 0); 
 
\t \t \t circle(gray, center, radius, Scalar(0,0,255), 3, 8, 0); 
 
\t \t } 
 

 
    /// Show your results 
 
\t \t namedWindow("Hough Circle Transform Demo 2", CV_WINDOW_AUTOSIZE); 
 
\t \t imshow("Hough Circle Transform Demo 2", gray); 
 

 
\t \t waitKey(0); 
 

 
    } 
 
}

画像:

これは私のコードでコードが何かを見つけることができませんが

enter image description here

、私はしきい値とarroundの演奏が、それ役に立たなかったお知らせ下さい。

開発プラットフォーム:VS2010、OpenCVのバージョン:2.4.10

答えて

1

円はとても小さいためではなく、そのstandard、バイナリイメージにあなただけ行う望めないのでHoughCircles

代替方法はfindContoursです。contourAreaの値とminEnclosingCircleの値の比で輪郭をフィルタリングします。


enter image description here

関連する問題