1. 程式人生 > >HoughCircles()函式 畫圓心和圓的輪廓

HoughCircles()函式 畫圓心和圓的輪廓

程式碼如下:

#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都需要源圖為二值影象! 二值就是隻有黑和白兩種顏色的影象,和灰度影象還是有區別的!

測試結果如下:

在這裡插入圖片描述 在這裡插入圖片描述 可以清楚的看見圓心和內圓。