• OpenCV 边缘检测 Laplacian


     1 //-----------------------------------【头文件包含部分】---------------------------------------  
     2 //            描述:包含程序所依赖的头文件  
     3 //----------------------------------------------------------------------------------------------  
     4 #include <opencv2/opencv.hpp>  
     5 #include<opencv2/highgui/highgui.hpp>  
     6 #include<opencv2/imgproc/imgproc.hpp>  
     7   
     8 //-----------------------------------【命名空间声明部分】---------------------------------------  
     9 //            描述:包含程序所使用的命名空间  
    10 //-----------------------------------------------------------------------------------------------  
    11 using namespace cv;  
    12   
    13   
    14 //-----------------------------------【main( )函数】--------------------------------------------  
    15 //            描述:控制台应用程序的入口函数,我们的程序从这里开始  
    16 //-----------------------------------------------------------------------------------------------  
    17 int main( )  
    18 {  
    19     //【0】变量的定义  
    20     Mat src,src_gray,dst, abs_dst;  
    21   
    22     //【1】载入原始图  
    23     src = imread("1.jpg");  //工程目录下应该有一张名为1.jpg的素材图  
    24   
    25     //【2】显示原始图  
    26     imshow("【原始图】图像Laplace变换", src);  
    27   
    28     //【3】使用高斯滤波消除噪声  
    29     GaussianBlur( src, src, Size(3,3), 0, 0, BORDER_DEFAULT );  
    30   
    31     //【4】转换为灰度图  
    32     cvtColor( src, src_gray, CV_RGB2GRAY );  
    33   
    34     //【5】使用Laplace函数  
    35     Laplacian( src_gray, dst, CV_16S, 3, 1, 0, BORDER_DEFAULT );  
    36   
    37     //【6】计算绝对值,并将结果转换成8位  
    38     convertScaleAbs( dst, abs_dst );  
    39   
    40     //【7】显示效果图  
    41     imshow( "【效果图】图像Laplace变换", abs_dst );  
    42   
    43     waitKey(0);  
    44   
    45     return 0;  
    46 }  

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

     

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

     

    (2) 作为一个二阶微分算子,拉普拉斯算子把C函数映射到C函数,对于k ≥ 2。表达式(1)(或(2))定义了一个算子Δ :C(R) → C(R),或更一般地,定义了一个算子Δ : C(Ω) → C(Ω),对于任何开集Ω。

     

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

     

    Laplacian 算子的定义:



     

    需要点破的是,由于 Laplacian使用了图像梯度,它内部的代码其实是调用了 Sobel 算子的。

     

    另附一个小tips:让一幅图像减去它的Laplacian可以增强对比度。

     

    原始图像:

    边缘检测图像:

  • 相关阅读:
    日历(Calendar)模块
    关于Python3中函数:
    正则表达式全集
    python同时遍历两个list
    Python 类
    vs_code 快捷键
    Linux常用命令大全
    Linux基础命令sort
    Linux基础命令练习题答案7.10
    Linux基础命令练习题7.10
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/12821690.html
Copyright © 2020-2023  润新知