OPENCV學習之Laplacian算子的使用

效果圖:

在這裏插入圖片描述
概念:

Laplace算子相關理論與概念講解
C++: void Laplacian(InputArray src,OutputArray dst, int ddepth, int ksize=1, double scale=1, double delta=0, intborderType=BORDER_DEFAULT );
第一個參數,InputArray類型的image,輸入圖像,即源圖像,填Mat類的對象即可,且需爲單通道8位圖像。
第二個參數,OutputArray類型的edges,輸出的邊緣圖,需要和源圖片有一樣的尺寸和通道數。
第三個參數,int類型的ddept,目標圖像的深度。
第四個參數,int類型的ksize,用於計算二階導數的濾波器的孔徑尺寸,大小必須爲正奇數,且有默認值1。
第五個參數,double類型的scale,計算拉普拉斯值的時候可選的比例因子,有默認值1。
第六個參數,double類型的delta,表示在結果存入目標圖(第二個參數dst)之前可選的delta值,有默認值0。
第七個參數, int類型的borderType,邊界模式,默認值爲BORDER_DEFAULT。這個參數可以在官方文檔中borderInterpolate()處得到更詳細的信息。
Laplacian( )函數其實主要是利用sobel算子的運算。它通過加上sobel算子運算出的圖像x方向和y方向上的導數,來得到我們載入圖像的拉普拉斯變換結果。

int main()
{
	Mat src = imread("2.jpg");
	imshow("原圖", src);

	Mat dst, abs_dst,gray;
	//使用高斯濾波消除噪點,不使用的話效果圖在最後
	GaussianBlur(src, src, Size(3, 3), 0, 0, BORDER_DEFAULT);
	//轉化爲灰度圖像
	cvtColor(src, gray, COLOR_BGR2GRAY);
	//使用Laplace函數
	Laplacian(gray, dst, CV_16S, 3, 1, 0, BORDER_DEFAULT);
	//計算絕對值,並將結果轉化成8位
	convertScaleAbs(dst, abs_dst);
	
	imshow("Laplacian", abs_dst);
	waitKey(0);
	return(0);
	
}

在這裏插入圖片描述

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