Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法

简介: Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法

【1】算法简介

      Laplacian(拉普拉斯)算子是一种二阶导数算子,其具有旋转不变性,可以满足不同方向的图像边缘锐化(边缘检测)的要求。通常情况下,其算子的系数之和需要为零。 Laplacian算子具有各方向同性的特点,能够对任意方向的边缘进行提取,具有无方向性的优点,因此使用Laplacian算子提取边缘不需要分别检测X方向的边缘和Y方向的边缘,只需要一次边缘检测即可。Laplacian算子是一种二阶导数算子,对噪声比较敏感,因此常需要配合高斯滤波一起使用。

       

        需要注意,在上述图像中,计算结果的值可能为正数,也可能为负数。所以,需要对计算结果取绝对值,以保证后续运算和显示都是正确的。

【2】算法参数

void Laplacian( InputArray src, OutputArray dst, int ddepth,
                             int ksize = 1, double scale = 1, double delta = 0,
                             int borderType = BORDER_DEFAULT );

src:输入原图像,可以是灰度图像或彩色图像。

dst:输出图像,与输入图像src具有相同的尺寸和通道数

ddepth:输出图像的数据类型(深度),根据输入图像的数据类型不同拥有不同的取值范围,具体的取值范围在表5-1给出,当赋值为-1时,输出图像的数据类型自动选择。

ksize:滤波器的大小,必须为正奇数。

scale:对导数计算结果进行缩放的缩放因子,默认系数为1,表示不进行缩放。

delta:偏值,在计算结果中加上偏值。

borderType:像素外推法选择标志,默认参数为BORDER_DEFAULT,表示不包含边界值倒序填充。

【3】完整代码

#include<opencv2\opencv.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<opencv2\highgui\highgui.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
  //载入原始图
  Mat src = imread("E:\\乔大花进度\\11-28\\边缘检测\\4.jpg");
  //【1】定义变量
  Mat src_gray, dst, abs_dst;
  //【2】显示原图
  imshow("原始图",src);
  //【3】使用高斯滤波消除噪声
  GaussianBlur(src,src,Size(3,3),0,0,BORDER_DEFAULT);
  //【4】转为灰度图
  cvtColor(src,src_gray,COLOR_BGR2GRAY);
  //【5】Laplacian查找边缘
  Laplacian(src_gray,dst,CV_16S,3,1,0);
  //【6】计算绝对值,并将结果转为8位
  convertScaleAbs(dst,abs_dst);
  //【7】显示效果图
  imshow("Laplacian变换",abs_dst);
  cout << "Laplacian算法输出图像的通道" << abs_dst.channels() << endl;
  waitKey(0);
  system("pause");
  destroyAllWindows();
  return 0;
}

运行结果:

相关文章
|
7月前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
244 7
|
6月前
|
算法 开发工具 计算机视觉
【零代码研发】OpenCV实验大师工作流引擎C++ SDK演示
【零代码研发】OpenCV实验大师工作流引擎C++ SDK演示
92 1
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
OpenCV与AI深度学习之常用AI名词解释学习
AGI:Artificial General Intelligence (通用人工智能):是指具备与人类同等或超越人类的智能,能够表现出正常人类所具有的所有智能行为。又被称为强人工智能。
138 2
|
5月前
|
计算机视觉 Python
opencv 处理图像去噪的几种方法学习
OpenCV 提供了多种图像去噪的方法,以下是一些常见的去噪技术以及相应的 Python 代码示例: 均值滤波:使用像素邻域的灰度均值代替该像素的值。
71 0
|
5月前
|
算法 异构计算
FPGA强化(10):基于Sobel算法的边缘检测(二)
FPGA强化(10):基于Sobel算法的边缘检测(二)
97 0
|
5月前
|
算法 异构计算
FPGA强化(10):基于Sobel算法的边缘检测(一)
FPGA强化(10):基于Sobel算法的边缘检测
41 0
|
6月前
|
计算机视觉 C++
【见微知著】OpenCV中C++11 lambda方式急速像素遍历
【见微知著】OpenCV中C++11 lambda方式急速像素遍历
55 0
|
6月前
|
机器学习/深度学习 开发框架 TensorFlow
### 如何系统化学习OpenCV4
### 如何系统化学习OpenCV4
43 0
|
7月前
|
算法 计算机视觉 Python
【OpenCV】-算子(Sobel、Canny、Laplacian)学习
【OpenCV】-算子(Sobel、Canny、Laplacian)学习
226 2
|
7月前
|
存储 计算机视觉
OpenCV—学习基本绘图
OpenCV—学习基本绘图