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

【1】算法简介

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

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

41f754b2f4ca4a25a6dc3dfd3a7a16d3.png

【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
#include
#includeusing 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;}

运行结果:
31488877edcb449396658860942de52b.png


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部