霍夫圓檢測 opencv


  進行霍夫圓變換中有一個API:HoughCircles()。

  第五個參數為double類型的minDist(),為霍夫變換檢測到的圓的圓心之間的最小距離,即讓算法能明顯區分的兩個不同圓之間的最小距離。這個參數如果設置太小,多個相鄰的圓可能被錯誤的檢測成了一個重合的圓。反之,如果設置太大,某些圓就不能檢測出來。

  第七個參數,它越小,就越可以檢測到更多根本不存在的圓,而它越大的話,能通過檢測的圓就更加接近完美的圓形了。

 1 #include<opencv2/opencv.hpp>
 2 
 3 using namespace std;
 4 using namespace cv;
 5 
 6 int  main()
 7 {
 8     Mat src = imread("D:/yuan.jpg");//讀取原圖
 9 
10     Mat mid, dst;//mat類型的中間變量和目標圖像
11 
12     dst = src.clone();//原圖像深拷貝到目標圖像
13 
14     cvtColor(dst, mid, COLOR_BGR2GRAY); //轉化為灰度圖像
15     GaussianBlur(mid, mid, Size(9, 9), 2, 2); //高斯濾波
16 
17     //進行霍夫圓變換
18     vector<Vec3f>circles;
19     HoughCircles(mid, circles, HOUGH_GRADIENT, 1.5, 35, 200, 150, 0, 0);
20     //依次在圖中繪制出圓
21     for (size_t i = 0; i < circles.size(); i++)
22     {    
23         //找出圓心和半徑
24         Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
25         int radius = cvRound(circles[i][2]);
26          //繪制圓心和半徑
27         circle(dst, center, 3, Scalar(0, 255, 0), -1, 8, 0);
28         circle(dst, center, radius, Scalar(155, 50, 255), 3, 8, 0);
29 
30     }
31     //顯示原圖
32     namedWindow("原圖", CV_WINDOW_AUTOSIZE);
33     imshow("原圖", src);
34     //顯示效果圖
35     namedWindow("效果圖", CV_WINDOW_AUTOSIZE);
36     imshow("效果圖",dst);
37     imwrite("D:/learn-opencv/houghcircles.jpg", dst);
38     waitKey(0);
39     return 0;
40 
41 }

原圖:

效果圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM