int main(){
Mat src = imread("test.jpg");//载入原始图
Mat src1, src2, src3, src4,dst;
namedWindow("效果图窗口", 1);//定义窗口
//使用高斯滤波消除噪声
GaussianBlur(src, src2, Size(3, 3), 0, 0, BORDER_DEFAULT);
imshow("效果图窗口", src2);
waitKey(3000);
//转换为灰度图
cvtColor(src2, src3, CV_RGB2GRAY);
imshow("效果图窗口", src3);
waitKey(3000);
//使用Laplace函数
Laplacian(src3, src4, CV_16S, 3, 1, 0, BORDER_DEFAULT);
imshow("效果图窗口", src4);
waitKey(3000);
//计算绝对值,并将结果转换成8位
convertScaleAbs(src4, dst);
imshow("效果图窗口", dst);
waitKey(3000);
return 0;
}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()处得到更详细的信息。