霍夫圓檢測 opencv
阿新 • • 發佈:2018-09-26
size_t gradient 效果 lur ear 灰度圖 window turn std
進行霍夫圓變換中有一個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 }
原圖:
效果圖:
霍夫圓檢測 opencv