HoughCircles()函式 畫圓心和圓的輪廓
阿新 • • 發佈:2018-12-11
程式碼如下:
#include <opencv2/opencv.hpp> #include <opencv2/imgproc/imgproc.hpp> using namespace cv; using namespace std; int main( ) { //【1】載入原始圖、Mat變數定義 Mat srcImage = imread("C://1.bmp"); //工程目錄下應該有一張名為1.jpg的素材圖 Mat midImage,dstImage;//臨時變數和目標圖的定義 //【2】顯示原始圖 imshow("【原始圖】", srcImage); //【3】轉為灰度圖並進行影象平滑 cvtColor(srcImage,midImage, COLOR_BGR2GRAY);//轉化邊緣檢測後的圖為灰度圖 GaussianBlur( midImage, midImage, Size(9, 9), 2, 2 ); //【4】進行霍夫圓變換 vector<Vec3f> circles; HoughCircles( midImage, circles, CV_HOUGH_GRADIENT,1.5, 10, 200, 100, 0, 0 ); //【5】依次在圖中繪製出圓 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( srcImage, center, 3, Scalar(0,0,255), -1, 8, 0 ); //圓心 半徑為3 實心的圓 -1代表是不是被填充 //繪製圓輪廓 circle( srcImage, center, radius, Scalar(255,255,255), 3, 8, 0 ); //圓輪廓 半徑為radius的值 3代表正值 線條粗細的程度 } //【6】顯示效果圖 imshow("【效果圖】", srcImage); waitKey(0); return 0; }
scalar函式,顯示顏色,可以自己去更改! 別的沒有什麼具體要說的了,HoughCircles()函式,具體引數代表什麼可以自己去百度查一下就行了。 不同於HoughLines和HoughLinesP,比較明顯的一個區別是:HoughCircles()函式不需要源圖是二值的,而HoughLines和HoughLinesP都需要源圖為二值影象! 二值就是隻有黑和白兩種顏色的影象,和灰度影象還是有區別的!
測試結果如下:
可以清楚的看見圓心和內圓。