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()处得到更详细的信息。