OpenCV-Laplacian边缘检测

简介: OpenCV-Laplacian边缘检测

函数原型

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


参数说明

InputArray类型的src,输入图像,8位图像。

OutputArray类型的dst,输出图像。

int类型的ddepth,输出图像的深度。若src为CV_8U,则可取-1/CV_16S/CV_32F/CV_64F;若src为CV_16U/CV_16S,可取-1/CV_32F/CV_64F;若src为CV_32F,可取-1/CV_32F/CV_64F;若src为CV_64F,可取-1/CV_64F。

int类型的ksize,默认值为3,表示Sobel核的大小,取奇数。

double类型的scale,计算导数值时选的缩放因子,默认为1。

double类型的delta,表示在结果存入目标图之前可选的delta值,默认为0。

int类型的borderType,边界模式。


函数原理

      Laplacian算子是n维欧几里德空间中的一个二阶微分算子,定义为梯度grad的散度div。因此如果f是二阶可微的实函数,则f的拉普拉斯算子定义如下:

1)f的拉普拉斯算子也是笛卡尔坐标系中的所有非混合二阶偏导数求和。

2)作为一个二阶微分算子,拉普拉斯算子把C函数映射到C函数。对于k大于等于2时,定义算子

      根据图像处理的原理可知,二阶导数可以用来进行检测边缘。因为图像是二维,需要在两个方向进行求导。使用Laplacian算子将会使求导过程变得简单。

      Laplacian算子的定义为:


测试代码

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
  // 加载图片
  Mat src = imread("test.jpg");
  if (src.empty())
  {
    cout << "picture load error!" << endl;
    return 0;
  }
  Mat blur, gray, result, abs_result;
  // 高斯滤波
  GaussianBlur(src, blur, Size(3, 3), 0, 0, BORDER_DEFAULT);
  // 转为灰度图像
  cvtColor(blur, gray, COLOR_RGB2GRAY);
  // 拉普拉斯
  Laplacian(gray, result, CV_16S, 5, 1, 0, BORDER_DEFAULT);
  // 计算绝对值
  convertScaleAbs(result, abs_result);
  // 结果显示
  imshow("src", src);
  imshow("result", abs_result);
  waitKey(0);
  return 0;
}


测试效果

图1 原图

图2 算子孔径尺寸为5时效果图

图3 算子孔径尺寸为3时效果图

      注意由于Laplacian使用了图像梯度,所以其内部代码其实调用了Sobel算子。利用Sobel算子的运算,计算出x方向和y方向的导数,进而得到载入图像的拉普拉斯变换结果。

      当尺寸为3*3时,拉普拉斯算子的模板为:

      如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

相关文章
|
6月前
|
算法 计算机视觉
OpenCV(二十六):边缘检测(二)
OpenCV(二十六):边缘检测(二)
53 0
|
6月前
|
计算机视觉
OpenCV(二十五):边缘检测(一)
OpenCV(二十五):边缘检测(一)
127 0
|
6月前
|
算法 计算机视觉 Python
OpenCV中Canny边缘检测和霍夫变换的讲解与实战应用(附Python源码)
OpenCV中Canny边缘检测和霍夫变换的讲解与实战应用(附Python源码)
400 0
|
5月前
|
算法 计算机视觉
【Qt&OpenCV 图像边缘检测 Sobel/Laplace/Canny】
【Qt&OpenCV 图像边缘检测 Sobel/Laplace/Canny】
69 0
|
6月前
|
计算机视觉
【OpenCV】-边缘检测汇总示例
【OpenCV】-边缘检测汇总示例
|
6月前
|
算法 计算机视觉
OpenCV高斯差分技术实现图像边缘检测
OpenCV高斯差分技术实现图像边缘检测
|
6月前
|
算法 数据可视化 计算机视觉
opencv Canny边缘检测(python)
opencv Canny边缘检测(python)
|
6月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
298 0
|
6月前
|
算法 计算机视觉 C++
Opencv(C++)学习系列---Sobel索贝尔算子边缘检测
Opencv(C++)学习系列---Sobel索贝尔算子边缘检测
160 0
|
6月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Canny边缘检测算法
Opencv(C++)学习系列---Canny边缘检测算法
183 0