首页 > 其他分享 >OpenCV(cv::Laplacian())

OpenCV(cv::Laplacian())

时间:2024-09-23 14:02:42浏览次数:8  
标签:拉普拉斯 dst 图像 Laplacian CV OpenCV 算子 cv

目录



cv::Laplacian() 是 OpenCV 中用于计算图像拉普拉斯算子(Laplacian)的函数。拉普拉斯算子是一种边缘检测方法,它通过计算每个像素点的二阶导数来识别快速变化的区域(如边缘)。



1. 函数定义

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

参数:

  1. src:

    • 输入图像,通常是灰度图像(单通道),但也可以是多通道图像。输入图像可以是 CV_8U, CV_16U, CV_16S, CV_32FCV_64F 类型。
  2. dst:

    • 输出图像,包含与输入图像相同大小和类型的图像。拉普拉斯运算后的结果会存储在这个参数中。
  3. ddepth:

    • 输出图像的深度(位深),通常为 CV_16S, CV_32F, 或 CV_64F拉普拉斯算子涉及求导数,导数结果可以是负数,所以输出深度不能为 CV_8U,以避免信息丢失。
  4. ksize:

    • 核的大小(窗口大小),必须为奇数,通常为 1、3、5、7。ksize 决定了拉普拉斯核的尺寸。默认值为 1,这意味着使用 3x3 核。较大的核可能会对边缘检测结果产生平滑效果,但同时也会增加计算量。
  5. scale:

    • 可选的缩放因子,用于缩放计算出的拉普拉斯结果。默认值为 1。它允许你调整结果的数值范围。
  6. delta:

    • 可选的偏移量,在计算结果中添加这个值。通常用于避免过多的负值或在最终结果中微调亮度。
  7. borderType:

    • 边界类型,决定如何处理图像边缘。常见的选项包括 BORDER_DEFAULT, BORDER_CONSTANT, BORDER_REPLICATE 等。默认值为 BORDER_DEFAULT,即使用镜像扩展。


2. 拉普拉斯算子的原理

拉普拉斯算子是二阶导数运算符,用于检测图像中的边缘。它通过计算每个像素点在两个方向上的二阶导数,能够检测到快速变化的灰度值区域。

在离散图像中,拉普拉斯算子可表示为以下形式:

  • 二维离散拉普拉斯算子使用的典型卷积核为:
   0   1   0
   1  -4   1
   0   1   0

   1   1   1
   1  -8   1
   1   1   1

第一个核会检测水平方向和垂直方向的变化,第二个核会同时检测对角线方向上的变化。拉普拉斯算子对图像的平滑区域不敏感,但对边缘非常敏感。



3. 示例

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    // 读取灰度图像
    Mat src = imread("image.jpg", IMREAD_GRAYSCALE);

    // 检查是否成功加载
    if (src.empty()) {
        return -1;
    }

    // 创建输出图像
    Mat dst;

    // 使用拉普拉斯算子
    int ddepth = CV_16S;  // 使用16位带符号深度来保存导数结果
    Laplacian(src, dst, ddepth, 3, 1, 0, BORDER_DEFAULT);

    // 将结果转换回 8 位
    Mat abs_dst;
    convertScaleAbs(dst, abs_dst);

    // 显示结果
    imshow("Laplacian", abs_dst);
    waitKey(0);

    return 0;
}

解释:

  1. 深度选择 CV_16S: 拉普拉斯算子计算二阶导数,可能会产生负值,因此我们使用带符号的 16 位整数来存储这些值。
  2. convertScaleAbs(): 将 dst 转换为 8 位图像时,负值会被裁剪为零,所以我们通常使用 convertScaleAbs() 将结果转换为绝对值,并将其缩放为 8 位图像,以便在视觉上更好地显示边缘。
  3. ksize=3: 核大小为 3x3,较大的核会使边缘检测效果更平滑,但会影响细节。


4. 应用场景

  • 边缘检测: 拉普拉斯算子通常用于边缘检测,能够识别图像中的急剧变化区域。
  • 图像增强: 拉普拉斯算子也可以用于图像增强,尤其是当需要加强图像中的细节时。


总结

cv::Laplacian() 是一个简单且高效的边缘检测工具,它通过计算图像的二阶导数来识别边缘。使用时需要注意选择合适的输出图像深度,并结合 convertScaleAbs() 来保证结果的可视化效果。



标签:拉普拉斯,dst,图像,Laplacian,CV,OpenCV,算子,cv
From: https://www.cnblogs.com/keye/p/18426965

相关文章

  • 让求职变得简单!为什么你应该试试CVBee.ai的智能简历生成器
    摘要:在求职中,优秀的简历往往决定是否能获得面试机会。如果你需要一个智能、高效的工具来提升简历质量,CVBee.ai是值得推荐的选择。借助AI,CVBee.ai帮助生成专业简历并优化内容,提高通过招聘系统的概率,帮助你在激烈的职场竞争中脱颖而出。如今的求职市场竞争异常激烈,一份优秀的简历是......
  • ScanFormer:逐层抵达目标,基于特征金字塔的指代表达理解框架 | CVPR'24
    指代表达理解(REC)旨在在图像中定位由自由形式自然语言描述指定的目标对象。尽管最先进的方法取得了令人印象深刻的性能,但它们对图像进行了密集感知,包含与语言查询无关的多余视觉区域,导致额外的计算开销。这启发论文探讨一个问题:能否消除与语言无关的多余视觉区域,以提高模型的效率?......
  • OpenCV(Canny 边缘检测算法)
    目录1.高斯滤波(GaussianBlur)2.计算梯度强度和方向(GradientCalculation)3.非极大值抑制(Non-MaximumSuppression)3.1示例1.梯度强度矩阵(7x7)2.每个像素的梯度方向(7x7)3.非极大值抑制过程4.非极大值抑制后的矩阵(7x7)4.双阈值处理(DoubleThresholding)5.边缘连接(EdgeTracking......
  • 设计原理图:417-基于XCVU9P+ C6678的8T8R的无线MIMO平台
    基于XCVU9P+C6678的8T8R的无线MIMO平台一、板卡概述     北京太速科技板卡基于TI TMS320C6678DSP和XCVU9P高性能FPGA,FPGA接入4片AD9361无线射频,构建8输入8输出的无线MIMO平台,丰富的FPGA资源和8核DSP为算法验证和信号处理提供强大能力。二、技术指标 ● 板卡为......
  • OpenCV(图像锐化)
    目录1.图像锐化2.原理3.示例1.图像锐化图像锐化是一种图像增强技术,旨在通过增强图像的边缘信息,使图像看起来更加清晰和具有细节。图像锐化的核心思想是突出图像中的高频分量,这通常与图像中的边缘和快速变化的区域相关。2.原理图像锐化的基本原理是通过增强图像中像素......
  • execve
    目录glibcdemoglibcexecve()执行由pathname指定的程序。这会导致当前正在被调用进程运行的程序被一个新程序替换,且该新程序会重新初始化栈、堆,以及(已初始化和未初始化的)数据段。demoexecve(path,args,env):用execve()替换当前进程为ls命令。如果execve()执行成功,当......
  • [OpenCV] 数字图像处理 C++ 学习——16直方图均衡化、直方图比较 详细讲解+附完整代码
    文章目录前言1.直方图均衡化的理论基础(1)什么是直方图(2)直方图均衡化原理(3)直方图均衡化公式2.直方图比较理论基础(1)相关性(Correlation)——HISTCMP_CORREL(2)卡方(Chi-Square)——HISTCMP_CHISQR(3)十字交叉性(Intersection)——HISTCMP_INTERSECT(4)巴氏距离......
  • OpenCV(图像对比度)
    目录1.图像对比度2.对比度调整的原理3.示例4.调整对比度的效果1.图像对比度图像对比度是指图像中亮部和暗部之间的差异程度。对比度越高,亮区更亮,暗区更暗;对比度低时,亮区和暗区的差异不明显,图像显得平淡。2.对比度调整的原理图像对比度可以通过线性变换实现,公式如下:......
  • OpenCV(图像明度)
    目录1.图像明度(Brightness)2.明度调整的原理3.示例1.图像明度(Brightness)明度(Brightness)是图像中反映光亮程度的一个属性,通常用于描述像素的亮度水平。对于RGB图像,明度(Luminance)每个像素中红、绿、蓝通道的加权和。\[\text{Luminance}=0.299\timesR+0.587\timesG......
  • [CVPR2024]DeiT-LT Distillation Strikes Back for Vision Transformer Training on L
    在长尾数据集上,本文引入强增强(文中也称为OOD)实现对DeiT的知识蒸馏的改进,实现尾部类分类性能的提升。动机ViT相较于CNN缺少归纳偏置,如局部性(一个像素与周围的区域关系更紧密)、平移不变性(图像的主体在图像的任意位置都应该一样重要)。因此需要大型数据集进行预训练。长尾数据学习......