Laplacian 算子簡介
求多元函數的二階導數的映射又稱為 Laplacian 算子:

計算拉普拉斯變換:Laplacian 函數
void Laplacian(InputArray src, OutputArray dst, int ddepth, int ksize = 1, double scale = 1, double delta = 0, int borderType = BORDER_DEFAULT);
- src,輸入圖像,填 Mat 類型即可,但需為單通道 8 位圖像。
- dst,輸出圖像,需要和源圖像有一樣的尺寸和類型。
- ddepth,輸出圖像的深度,滿足下列要求:
src.depth() = CV_8U, ddepth = -1 / CV_16S / CV_32F / CV_64F
src.depth() = CV_16U / CV_16S, ddepth = -1 / CV_32F / CV_64F
src.depth() = CV_32F, ddepth = -1 / CV_32F / CV_64F
src.depth() = CV_64F, ddepth = -1 / CV_64F
- ksize,表示用於計算二階導數的濾波器的孔徑大小,必須取正奇數。默認值為 1,其實和 3 的效果一樣,都采用 3×3 的孔徑的濾波器,如下圖。

若考慮兩個對角線方向的偏導數, 則為:
好像只能取 1 和 3,不然算出來的不是近似二階導數。
- scale,計算拉普拉斯值的時候可選的比例因子,默認值為 1,表示默認情況下不進行縮放。
- delta,輸出的拉普拉斯值 = scale * ðf(x,y) + delta。
- borderType,x,y 方向上的濾波器都有一定大小,邊緣會處理不到,需要進行邊緣擴展。這個參數指定邊緣擴充類型。
代碼示例:
#include<opencv.hpp> #include<iostream>
using namespace std; using namespace cv; int main() { Mat src = imread("C:/Users/齊明洋/Desktop/證件照/6.jpg"); GaussianBlur(src, src, Size(3, 3), 0, 0); imshow("src", src); Mat gray, lap_img; cvtColor(src, gray, COLOR_BGR2GRAY); Laplacian(gray, lap_img, CV_16SC1, 3); convertScaleAbs(lap_img, lap_img); imshow("lap_img", lap_img); waitKey(0); }
效果演示:
借鑒博客:https://www.cnblogs.com/german-iris/p/4840647.html