拉普拉斯理论说明
待补充;
Laplacian API使用介绍
计算图像的拉普拉斯算子,用于图像边缘检测;
OpenCV中Laplacian的使用方式:
void Laplacian( InputArray src, OutputArray dst, int ddepth,
int ksize = 1, double scale = 1, double delta = 0,
int borderType = BORDER_DEFAULT );
该函数通过使用Sobel算子计算出的二阶x,y的导数相加来计算源图像的拉普拉斯算子:
[dst = Delta src = dfrac{partial^2 src}{partial x^2} + dfrac{partial^2src}{partial y^2}
]
如果ksize=1,则该函数计算拉普拉斯算子的方式是利用下面的核进行计算:

其中:
src表示源图像;dst表示输出;ddepth表示输出位数,需要比源图像大;ksize表示核大小;scale表示缩放系数;delta表示偏移量;borderType表示对图像边界如何处理;
拉普拉斯算子实现图像边缘检测
类似于使用Sobel进行图像边缘检测,包含以下步骤:
- 高斯模糊
- 转灰度图
- 拉普拉斯-计算二阶导数
- 取绝对值convertScaleAbs()
- 显示结果
结果如下:

完成程序如下:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
/**
* 边缘处理
*/
int main(){
// 读取图像
Mat src = imread("/home/chen/dataset/lena.jpg");
if (src.empty()){
cout << "could not load image." << endl;
return -1;
}
namedWindow("src", WINDOW_AUTOSIZE);
imshow("src", src);
// 1. 高斯模糊
Mat srcBlur;
GaussianBlur(src, srcBlur, Size(3, 3), 0, 0);
// 2. 转灰度图
Mat srcGray;
cvtColor(srcBlur, srcGray, COLOR_BGR2GRAY);
cout << srcGray.type() << endl;
// 3. 拉普拉斯-计算二阶导数
Mat srcGrad;
Laplacian(srcGray, srcGrad, CV_16S, 3);
Mat dst;
convertScaleAbs(srcGrad, dst);
threshold(dst, dst, 0, 244, THRESH_OTSU);
namedWindow("dst", WINDOW_AUTOSIZE);
imshow("dst", dst);
waitKey(0);
return 0;
}