拉普拉斯算子可以用于边缘检测,同时该算子不具有方向性,可以同时检测到 X 方向和 Y 方向的边缘,综合后检测出图像的边缘。
即拉普拉斯算子是 各向同性 的,这在很多情况下是一个优点,因为我们一般来说会同时关注 X 方向和 Y 方向的边缘,所以这时候就不需要做两次,一次边缘检测就能得到结果。
这里要注意的是,拉普拉斯算子是一种 二阶导数 算子,所以对噪声很敏感,在实际运用中通常会搭配高斯滤波一起用。
公式:

void cv::Laplacian ( InputArray src,
OutputArray dst,
int ddepth,
int ksize = 1,
double scale = 1,
double delta = 0,
int borderType = BORDER_DEFAULT
)
解析:
注: 当 ksize=1 时,拉普拉斯算子滤波器为 3X3 的孔径,如下:

后三个参数一般选择默认值
void TestLaplacian()
{
cv::Mat lena = cv::imread("lena.jpg", 1);
cv::Mat blured;
cv::Mat result_1;
cv::Mat result_2;
cv::GaussianBlur(lena, blured, cv::Size(5, 5), 0, 0);
cv::Laplacian(lena, result_1, CV_32F);
cv::Laplacian(blured, result_2, CV_32F);
cv::imshow("lena", lena);
cv::imshow("result_1", result_1);
cv::imshow("result_2", result_2);
cv::waitKey(0);
return;
}
原图:

单独使用拉普拉斯算子进行边缘检测:

先用高斯滤波,再用拉普拉斯算子进行边缘检测:

可以看到,搭配使用后效果更佳