效果圖:
概念:
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);
}