OpenCV图像边缘检测(Laplace算法)

一、Laplace算法简介
  二阶微分在亮的一边是负的,在暗的一边是正的。常数部分为零。可以用来确定边的准确位置,以及像素在亮的一侧还是暗的一侧。
  拉普拉斯算子是最简单的各向同性微分算子,具有旋转不变性。一个二维图像函数 的拉普拉斯变换是各向同性的二阶导数,定义为:

这里写图片描述

  其中:

OpenCV图像边缘检测(Laplace算法)_第1张图片

  由于 Laplacian使用了图像梯度,它内部的代码其实是调用了 Sobel 算子的。同时,可以让一幅图像减去它的Laplacian增强其对比对。

二、OpenCV中Laplacian函数解析

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

  第一个参数,InputArray类型的image,输入图像,即源图像,需为单通道8位图像。
  第二个参数,OutputArray类型的edges,输出的边缘图,需要和源图片有一样的尺寸和通道数。
  第三个参数,int类型的ddept,目标图像的深度。
  第四个参数,int类型的ksize,用于计算二阶导数的滤波器的孔径尺寸,大小必须为正奇数,且有默认值1。
  第五个参数,double类型的scale,计算拉普拉斯值的时候可选的比例因子,有默认值1。
  第六个参数,double类型的delta,表示在结果存入目标图(dst)之前可选的delta值,有默认值0。
  第七个参数, int类型的borderType,边界模式,默认值为BORDER_DEFAULT。

三、实例
1、代码


#include   
#include  
#include  

using namespace cv;

int main()
{
    //【0】变量的定义  
    Mat src, src_gray, dst, abs_dst;

    //【1】载入原始图    
    src = imread("1.jpg");    

    //【2】显示原始图   
    imshow("【原始图】图像Laplace变换", src);

    //【3】使用高斯滤波消除噪声  
    GaussianBlur(src, src, Size(3, 3), 0, 0, BORDER_DEFAULT);

    //【4】转换为灰度图  
    cvtColor(src, src_gray, CV_RGB2GRAY);

    //【5】使用Laplace函数  
    Laplacian(src_gray, dst, CV_16S, 3, 1, 0, BORDER_DEFAULT);

    //【6】计算绝对值,并将结果转换成8位  
    convertScaleAbs(dst, abs_dst);

    //【7】显示效果图  
    imshow("【效果图】图像Laplace变换", abs_dst);

    waitKey(0);

    return 0;
}

2、运行结果
(1)原图像

OpenCV图像边缘检测(Laplace算法)_第2张图片

(2)Laplace转换图像

OpenCV图像边缘检测(Laplace算法)_第3张图片

你可能感兴趣的:(OpenCV图像边缘检测(Laplace算法))