【从零学习OpenCV 4】Laplacian算子

小白学视觉”,选择“星标”公众号

重磅干货,第一时间送达

经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。

上述的边缘检测算子都具有方向性,因此需要分别求取X方向的边缘和Y方向的边缘,之后将两个方向的边缘综合得到图像的整体边缘。Laplacian算子具有各方向同性的特点,能够对任意方向的边缘进行提取,具有无方向性的优点,因此使用Laplacian算子提取边缘不需要分别检测X方向的边缘和Y方向的边缘,只需要一次边缘检测即可。Laplacian算子是一种二阶导数算子,对噪声比较敏感,因此常需要配合高斯滤波一起使用。

Laplacian算子的定义如式(5.20)所示。

OpenCV 4提供了通过Laplacian算子提取图像边缘的Laplacian()函数,该函数的函数原型在代码清单5-30中给出。

代码清单5-30 Laplacian()函数原型
1.void cv::Laplacian(InputArray src,
2. OutputArray dst,
3. int ddepth,
4. int ksize = 1,
5. double scale = 1,
6. double delta = 0,
7. int borderType = BORDER_DEFAULT
8. )

  • src:输入原图像,可以是灰度图像或彩色图像。
  • dst:输出图像,与输入图像src具有相同的尺寸和通道数
  • ddepth:输出图像的数据类型(深度),根据输入图像的数据类型不同拥有不同的取值范围,具体的取值范围在表5-1给出,当赋值为-1时,输出图像的数据类型自动选择。
  • ksize:滤波器的大小,必须为正奇数。
  • scale:对导数计算结果进行缩放的缩放因子,默认系数为1,表示不进行缩放。
  • delta:偏值,在计算结果中加上偏值。
  • borderType:像素外推法选择标志,取值范围在表3-5中给出,默认参数为BORDER_DEFAULT,表示不包含边界值倒序填充。

该函数利用Laplacian算子提取图像中的边缘信息,与Soble()函数相同,函数的前两个参数分别为输入图像和输出图像,第三个参数为输出图像的数据类型,这里需要注意由于提取边缘信息时有可能会出现负数,因此不要使用CV_8U数据类型的输出图像,否则会使得图像边缘提取不准确。函数第四个参数是滤波器尺寸的大小,必须是正奇数,当该参数的值大于1时,该函数通过Sobel算子计算出图像X方向和Y方向的二阶导数,将两个方向的导数求和得到Laplacian算子,其计算公式如式(5.21)所示。

当第四个参数等于1时, Laplacian算子如式(5.22)所示。

函数最后两个参数为图像缩放因子和图像外推填充方法的标志,多数情况下并不需要设置,只需要采用默认参数即可。

为了更好的理解Laplacian ()函数的使用方法,在代码清单5-31中给出了利用Laplacian ()函数检测图像边缘的示例程序。由于Laplacian算子对图像中的噪声较为敏感,因此程序中使用Laplacian算子分别对高斯滤波后的图像和未高斯滤波的图像进行边缘检测,检测结果在图5-34中给出。通过结果可以发现,图像去除噪声后通过Laplacian算子提取边缘变得更加准确。

代码清单5-31 myLaplacian.cpp利用Laplacian算子检测图像边缘
1.#include <opencv2\opencv.hpp>
2.#include <iostream>
3.

4.using namespace cv;
5.using namespace std;
6.

7.int main()
8.{
9.//读取图像,黑白图像边缘检测结果较为明显
10.Mat img = imread("equalLena.png", IMREAD_ANYDEPTH);
11.if (img.empty())
12.{
13.cout << "请确认图像文件名称是否正确" << endl;
14.return -1;
15.}
16.Mat result, result_g, result_G;
17.

18.//未滤波提取边缘
19.Laplacian(img, result, CV_16S, 3, 1, 0);
20.convertScaleAbs(result, result);
21.

22.//滤波后提取Laplacian边缘
23.GaussianBlur(img, result_g, Size(3, 3), 5, 0); //高斯滤波
24.Laplacian(result_g, result_G, CV_16S, 3, 1, 0);
25.convertScaleAbs(result_G, result_G);
26.

27.//显示图像
28.imshow("result", result);
29.imshow("result_G", result_G);
30.waitKey(0);
31.return 0;
32.}

图5-34 myLaplacian.cpp程序中图像提取边缘结果

(0)

相关推荐

  • python+opencv图像处理(四十三)

    Luplacian算子 1.Luplacian算子 可以用二阶导数可以用来检测边缘,拉普拉斯算子是线性二阶微分算子. 2.Luplacian算子实现 在 OpenCV 中, 可以用函数Laplacia ...

  • python+opencv图像处理(四十)

    Sobel算子  开头来张帅哥...... ----------------------这是严谨的分割线-------------------------- 1.Sobel算子(索贝尔算子) Sobe ...

  • (2条消息) 计算机视觉

    源码:https://github.com/PacktPublishing/OpenCV3-Computer-Vision-Application-Programming-Cookbook-Third ...

  • 机器视觉常用算法原理及 opencv 实现源码

    机器视觉常用算法原理及 opencv 实现源码

  • 【从零学习OpenCV 4】深度神经网络应用实例

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】图像修复

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】分割图像——Mean-Shift分割算法

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习OpenCV 4>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】分割图像——Grabcut图像分割

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】分割图像——分水岭法

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】QR二维码检测

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】图像矩的计算与应用

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习OpenCV 4>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】轮廓外接多边形

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】轮廓发现与绘制

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...