OPENCV學習之Canny邊緣檢測

效果圖如下:
在這裏插入圖片描述

Canny算子:

Canny函數利用Canny算法來進行圖像的邊緣檢測。
void Canny(InputArray image,OutputArray edges, double threshold1, double threshold2, int apertureSize=3,bool L2gradient=false )
第一個參數,InputArray類型的image,輸入圖像,即源圖像,填Mat類的對象即可,且需爲單通道8位圖像。
第二個參數,OutputArray類型的edges,輸出的邊緣圖,需要和源圖片有一樣的尺寸和類型。
第三個參數,double類型的threshold1,第一個滯後性閾值。
第四個參數,double類型的threshold2,第二個滯後性閾值。
第五個參數,int類型的apertureSize,表示應用Sobel算子的孔徑大小,其有默認值3。
第六個參數,bool類型的L2gradient,一個計算圖像梯度幅值的標識,有默認值false。
需要注意的是,這個函數閾值1和閾值2兩者的小者用於邊緣連接,而大者用來控制強邊緣的初始段,推薦的高低閾值比在2:1到3:1之間

//載入並顯示原圖
Mat src = imread("2.jpg");
	imshow("原圖", src);
	
	Mat dst, edge, gray;
	//創建一個與src同類型和大小的矩陣
	dst.create(src.size(), src.type());
	//將src轉化爲灰度圖像
	cvtColor(src, gray, COLOR_BGR2GRAY);
	//降噪處理
	blur(gray, edge, Size(3, 3));
	//運行Canny算子
	Canny(edge, edge, 3, 9, 3);
	//將dst內的所有元素設置爲0
	dst = Scalar::all(0);
	//將Canny運算的邊緣圖edge作爲掩碼輸出到原圖上
	src.copyTo(dst, edge);
	imshow("效果圖", dst);
	waitKey(0);
	return(0);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章