opencv基础篇 ——(七)边缘检测和图像锐化

        锐化和边缘检测是图像处理中常用的两种技术,它们可以用来增强图像的特征以及检测图像中的边缘

锐化: 锐化是一种增强图像中细节和边缘的技术,它使图像中的过渡区域更加明显,从而提高图像的清晰度和对比度。常见的锐化方法包括拉普拉斯算子和高斯滤波器等。

边缘检测: 边缘检测是一种寻找图像中突变区域的技术,它可以帮助我们找到图像中不同区域之间的边界。常见的边缘检测算法包括 Sobel、Canny 和 Scharr 等。

拉普拉斯算子laplacian 

        cv::laplacian 是 OpenCV 库中用于计算图像拉普拉斯算子(Laplacian operator)的函数,常用于边缘检测和图像锐化。拉普拉斯算子是一个二阶微分算子,可以捕捉图像中灰度值的快速变化,即边缘和细节变化。

函数声明:

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

参数说明:

  • InputArray src: 输入图像,可以是单通道 8-bit、16-bit 或 32-bit 浮点型图像,或者是多通道图像(在这种情况下,每个通道分别计算拉普拉斯响应,然后组合成输出图像)。

  • OutputArray dst: 输出图像,存储计算得到的拉普拉斯响应。数据类型取决于 ddepth 参数。

  • int ddepth: 输出图像的数据深度。可以选择如下值:

    • -1:表示与输入图像 src 同样的深度。
    • CV_8UCV_16UCV_16SCV_32F 或 CV_64F:指定输出图像的具体数据类型。
  • int ksize: 拉普拉斯滤波器的大小,必须为奇数且大于等于 1。较大的 ksize 可以平滑噪声,但可能会降低边缘定位的精度;较小的 ksize 对噪声敏感,但能更好地保留边缘细节。

  • double scale: 用于调整拉普拉斯响应的尺度因子。计算出的拉普拉斯值乘以 scale 后再存储到输出图像中。默认值为 1

  • double delta: 加到拉普拉斯响应上的偏置值。通常用于避免由于计算导致的负值或值过小的问题,有助于保持结果的动态范围。默认值为 0

  • int borderType: 边界填充类型,定义了如何处理图像边缘以外的像素。可选值包括:

    • BORDER_CONSTANT: 使用指定的 borderValue 填充边缘。
    • BORDER_REPLICATE: 复制边缘像素值。
    • BORDER_REFLECT: 反射边缘像素。
    • BORDER_WRAP: 包裹边缘像素。
    • 其他边界模式,具体参见 OpenCV 文档。

    默认值为 BORDER_DEFAULT,相当于 BORDER_REFLECT_101,即边缘像素以一种类似镜面反射的方式扩展。

工作原理与应用:

cv::laplacian 函数计算输入图像 src 上的拉普拉斯算子响应。拉普拉斯算子本质上是对图像在二维空间上进行二次微分,其数学表达式为:

其中,( f(x, y) ) 表示图像在坐标 ( (x, y) )处的灰度值。通过计算图像在水平和垂直方向上的二阶导数之和,拉普拉斯算子能够检测到灰度值的过零点(zero-crossings),这些点通常对应图像中的边缘位置。

在实际计算过程中,cv::laplacian 函数使用一个离散化的模板(卷积核)来近似拉普拉斯算子。模板的大小由 ksize 参数指定,常见的如 3x35x5 等。模板内的系数构成一个类似于: 

的对角线权重分布,中心像素与周围像素的差异被放大,从而凸显边缘。

应用示例:

// 读取输入图像
cv::Mat src = cv::imread("input_imag
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值