OPENCV学习之Laplacian算子的使用

效果图:

在这里插入图片描述
概念:

Laplace算子相关理论与概念讲解
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()处得到更详细的信息。
Laplacian( )函数其实主要是利用sobel算子的运算。它通过加上sobel算子运算出的图像x方向和y方向上的导数,来得到我们载入图像的拉普拉斯变换结果。

int main()
{
	Mat src = imread("2.jpg");
	imshow("原图", src);

	Mat dst, abs_dst,gray;
	//使用高斯滤波消除噪点,不使用的话效果图在最后
	GaussianBlur(src, src, Size(3, 3), 0, 0, BORDER_DEFAULT);
	//转化为灰度图像
	cvtColor(src, gray, COLOR_BGR2GRAY);
	//使用Laplace函数
	Laplacian(gray, dst, CV_16S, 3, 1, 0, BORDER_DEFAULT);
	//计算绝对值,并将结果转化成8位
	convertScaleAbs(dst, abs_dst);
	
	imshow("Laplacian", abs_dst);
	waitKey(0);
	return(0);
	
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lllllllllljg/article/details/104100609