1. 主要内容
- laplance算子理论——二阶导数获得图像边缘
- API讲解
2. laplance算子理论
(1) 基本理论
![](https://i-blog.csdnimg.cn/blog_migrate/a125231cd1bda8f637511dc5eb4acf28.png)
![](https://i-blog.csdnimg.cn/blog_migrate/04d420e500757fdb64acc77390ea8d8a.png)
解释:在二阶导数的时候,最大变化处的值为0即边缘值是0,通过二阶导数计算,依据理论我们可以计算图像的二阶导数来提取边缘。
(2) laplance算子
不会计算二阶导数?使用拉普拉斯算子(Laplance operator)
opencv提供了相应的API————cv::Laplance
3. 处理流程
高斯模糊——去噪声GaussianBlur()
转换为灰度图像cvtColor()
拉普拉斯————二阶导数计算Lapacian()
取绝对值convertScalarAbs()
显示结果
Laplacian( )函数其实主要是利用sobel算子的运算。它通过加上sobel算子运算出的图像x方向和y方向上的导数,来得到我们载入图像的拉普拉斯变换结果。
![](https://i-blog.csdnimg.cn/blog_migrate/f9b5789d85663484ab7299515e787a11.png)
4. API讲解
Laplacian(
//InputArray类型的image,输入图像,即源图像,填Mat类的对象即可,且需为单通道8位图像。
InputArray src,
//OutputArray类型的edges,输出的边缘图,需要和源图片有一样的尺寸和通道数。
OutputArray dst,
int depth,//int类型的ddept,目标图像的深度。
int ksize,//int类型的ksize,用于计算二阶导数的滤波器的孔径尺寸,大小必须为正奇数,且有默认值1。
double scale = 1,//double类型的scale,计算拉普拉斯值的时候可选的比例因子,有默认值1。
double delta = 0.0,//double类型的delta,表示在结果存入目标图(第二个参数dst)之前可选的delta值,有默认值0。
int borderType = 4// int类型的borderType,边界模式,默认值为BORDER_DEFAULT。
)
如果事后认为图像的对比不是很强烈,可以使用threshold()函数进行图像的二值化来提高图像的轮廓,当然也可以使用其他的方法。
提示:如果需要执行一个新的操作,最好不要总是将执行后的结果重新覆盖在原图像上,在你还不清楚图像的具体操作时,这样的操作是危险的。
此处对opencv的一点认知:
opencv是一个函数库,其中包含了各种大大小小的API供我们使用,为我们的程序设计提供很大的便利性,但是并不是图像处理就是要随便调用API就完事,需要自己对opencv这套函数库有一套自己的认识,通过各式各样的搭配组合才能获得最大的收获,得到想要的结果。