边缘检测 - Laplacian算子

一. Laplacian算子简介
Laplacian算子是 n 维欧几里德空间中的一个二阶微分算子。二阶导数可以用来进行检测边缘。因为图像是“二维”,需要在两个方向进行求导。使用Laplacian算子将会使求导过程变得简单。
Laplacian算子的定义为:
在这里插入图片描述
需要说明的是,由于Laplacian算子使用了图像梯度,它内部的代码其实是调用了Sobel算子。
边缘检测 - Laplacian算子_第1张图片
二. Laplacian() 函数介绍

void Laplacian(InputArray src, OutputArray dst, int ddepth, int ksize=1, double scale=1, double delta=0, int borderType=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。

三. 代码演示

int main(int argc, char** argv)
{
     
	Mat src = imread("E:/Image/wz.jpg");
	if (src.empty())
	{
     
		cout << "load image error..." << endl;
		return -1;
	}
	imshow("src img", src);

	GaussianBlur(src, src, Size(3, 3), 0, 0);
	cvtColor(src, src, CV_BGR2GRAY);

	// Laplacian
	Mat dst;
	Laplacian(src, dst, CV_16S, 3, 1, 0, BORDER_DEFAULT);
	convertScaleAbs(dst, dst);
	imshow("result", dst);

	waitKey(0);
	return 0;
}

结果示例:
边缘检测 - Laplacian算子_第2张图片注:

  1. convertScaleAbs() 函数可以实现图像增强,是一个位深转化函数,可将任意类型的数据转化为CV_8UC1。具体数据处理方式如下:
    (1). 对于srcalpha+beta的结果如果是负值且大于-255,则直接取绝对值;
    (2). 对于src
    alpha+beta的结果如果大于255,则取255;
    (3). 对于srcalpha+beta的结果是负值,且小于-255,则取255;
    (4). 对于src
    alpha+beta的结果如果在0-255之间,则保持不变;

你可能感兴趣的:(OpenCV学习旅程,opencv)