【OpenCV4】拉普拉斯算子提取边缘 cv::Laplacian() 用法详解和代码示例(c++)

2023-11-09

作用原理:

拉普拉斯算子可以用于边缘检测,同时该算子不具有方向性,可以同时检测到 X 方向和 Y 方向的边缘,综合后检测出图像的边缘。

即拉普拉斯算子是 各向同性 的,这在很多情况下是一个优点,因为我们一般来说会同时关注 X 方向和 Y 方向的边缘,所以这时候就不需要做两次,一次边缘检测就能得到结果。

这里要注意的是,拉普拉斯算子是一种 二阶导数 算子,所以对噪声很敏感,在实际运用中通常会搭配高斯滤波一起用。

公式:

在这里插入图片描述

函数原型:


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

解析:

  • src:输入图像
  • dst:输出图像(尺寸和通道数与输入一致)
  • ddepth:目标数据类型(位深,比如 CV_32F)
  • ksize:用于计算滤波器二阶导数的孔径尺寸(必须是正奇数)
  • scale:计算所得拉普拉斯值的缩放因子(可选,默认没有缩放)
  • delta:对计算结果整体做一个正向偏移(可选,默认没有偏移)
  • borderType:边界外推方法

注: 当 ksize=1 时,拉普拉斯算子滤波器为 3X3 的孔径,如下:
在这里插入图片描述
后三个参数一般选择默认值

代码示例:

void TestLaplacian()
{
    cv::Mat lena = cv::imread("lena.jpg", 1);
    cv::Mat blured;
    cv::Mat result_1;
    cv::Mat result_2;

    cv::GaussianBlur(lena, blured, cv::Size(5, 5), 0, 0);
    cv::Laplacian(lena, result_1, CV_32F);
    cv::Laplacian(blured, result_2, CV_32F);

    cv::imshow("lena", lena);
    cv::imshow("result_1", result_1);
    cv::imshow("result_2", result_2);
    cv::waitKey(0);

    return;
}

原图:
在这里插入图片描述
单独使用拉普拉斯算子进行边缘检测:
在这里插入图片描述
先用高斯滤波,再用拉普拉斯算子进行边缘检测:
在这里插入图片描述
可以看到,搭配使用后效果更佳

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【OpenCV4】拉普拉斯算子提取边缘 cv::Laplacian() 用法详解和代码示例(c++) 的相关文章

  • 如何在 Visual Studio 2010 中增强 XAML 设计器?

    当我使用 XAML 设计器时 进入设计器和退出设计器是如此困难和缓慢 当我这样做时 Visual Studio 卡了一段时间 有什么方法可以增强 XAML 设计器和编辑器吗 Ant 保存 XAML 文件时非常慢 这通常意味着您可能有复杂的
  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • 如何在 C# 中调整图像大小同时保持高质量?

    我从这里找到了一篇关于图像处理的文章 http www switchonthecode com tutorials csharp tutorial image editing saving cropping and resizing htt
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了

随机推荐

  • win10 64位系统上注册wincc的ocx插件问题

    win10 64位系统上注册wincc的ocx插件问题 今天下载一个anigif动态图控件 注册时死活注册不了 在win10操作系统下注册OCX控件 主要有以下几个步骤 1 以管理员的身份打开命令提示符 2 输入注册命令 回车即可 如reg
  • gitlab ssh key

    gitlab ssh key 查看是否拥有密钥 cd ssh ls 文件内容包含 id dsa 或id rsa命名的文件 其中一个带有 pub扩展名 pub 文件是你的公钥 另一个则是私钥 如果没有或者根本没有 ssh 目录 需要重新生成
  • HRNet-Semantic-Segmentation图像,视频推理

    源码 https github com HRNet HRNet Semantic Segmentation 我用的是pytorchv1 1分支 这么好的项目居然没有inference代码 于是自己整理了一个简单的demo jit和onnx
  • ISO/IEC 27001:2022 发布(中文),信息安全、网络安全和隐私保护 信息安全管理系统 要求

    ISO IEC 27001 2022 发布 中文 信息安全 网络安全和隐私保护 信息安全管理系统 要求 ISOIEC27001 2022中文信息安全 网络安全和隐私保护 数据集文档类资源 CSDN下载ISOIEC27001 2022中文信息
  • 2021年我最喜欢的Java Web报表工具-实现批量+套打入园通知书

    最近龙哥的园子开张了 不少同学加好友要求入园 为满足同学们的需求 特开此篇 用锐浪JAVA WEB报表实现批量 套打 生成打印入园通知书 锐浪JAVA WEB报表官网 我们先看一下今天要实现的效果 龙哥的 入园通知书 注 自已瞎编的通知书
  • LeetCode第529题:扫雷游戏

    让我们一起来玩扫雷游戏 给你一个大小为 m x n 二维字符矩阵 board 表示扫雷游戏的盘面 其中 M 代表一个 未挖出的 地雷 E 代表一个 未挖出的 空方块 B 代表没有相邻 上 下 左 右 和所有4个对角线 地雷的 已挖出的 空白
  • 驱动的调用

    目录 设备文件 编辑 测试驱动 读写回环测试 步骤 源文件 详细的讲解看注释即可 应用和驱动之间的数据交换 在应用层调用open来打开这个系统文件 在向这个设备文件使用read write等即可调用驱动的函数去工作 设备文件 设备文件连接着
  • Sparkstreaming读取kafka数据写入hive和es

    一 主要流程 此demo用到的软件如下 软件需先自行安装 springboot 1 5 9 RELEASE hadoop 2 7 2 spark 2 1 1 elasticsearch 5 2 2 kafka 0 10 2 1 hive s
  • Cron表达式解读

    背景说明 解读0 0 10 与 0 10 的区别 各个字符代表的含义 0代表从0分开始 代表任意字符 代表递增 1 0 0 10 代表从0分钟开始 每10分钟执行任务一次 启动时间 xx 20 05 第一次执行时间 xx 20 10 第二次
  • 项目心得(三)

    赛车游戏项目心得 介绍 确定项目 分工 进度规划 资源结构 游戏数据结构 遇到的问题 项目展示 开始场景 主菜单场景 成就查询场景 诗词系统场景 无尽塔场景 车库场景 阶位场景 视频演示 项目文件 总结 介绍 我带领的第二次小组团队项目 大
  • 1.1 密码学哈希函数

    我们需要理解的第一个密码学的基础知识是密码学哈希函数 哈希函数是一个数学函数 具有以下三个特性 其输入可为任意大小的字符串 它产生固定大小的输出 为使本章讨论更具体 我们假设输出值大小为256位 但是 我们的讨论适用于任意规模的输出 只要其
  • 操作系统虚拟机linux系统内建立的文件为只读,如何可读可写?

    1 先建立文件 按照自己的需求建立文件 2 打开主目录 发现a c文件为只读形式 3 在终端输入chmod 666 a c 4 返回主目录 文件为可读可写形式 5 打开a c文件就可以编辑代码并保存啦
  • llS6 and llS7解析漏洞

    1 什么是llS Internet Information Services 互联网信息服务 是微软公司由微软公司提供的基于运行Microsoft windows的互联网基本服务 web服务 因为IIS是在windows操作系统平台下开发的
  • 2021-10-25尤破金10.25黄金今日行情价格走势分析及黄金原油最新策略解套

    黄金行情走势分析 周一 10月25日 国际金价徘徊在1800美元重要心理关口附近 美元指数反弹限制了金价升势 在美联储主席鲍威尔表示通胀可能持续到明年后 投资人思索美联储可能会如何应对通胀压力 在鲍威尔上周五 10月22日 表示美联储应开始
  • Pytorch分布式训练(一)

    参考文献 Writing Distributed Applications with PyTorch PyTorch Tutorials 2 0 1 cu117 documentation 33 完整讲解PyTorch多GPU分布式训练代码
  • 简单报价单模板_科普:小程序定制和模板开发有什么区别?

    小程序常见的开发方式有三种 自己源代码开发 找外包团队定制开发 使用小程序模板类开发工具 对于不懂技术的小白来说 源代码开发困难太大 那么后两种方式该如何选择呢 它们到底都有什么区别 接下来就跟大家科普一下这些知识 1 成本不同 小程序模板
  • ClickHouse(四)表引擎

    官网 表引擎 ClickHouse文档 表引擎在 ClickHouse 中的作用十分关键 直接决定了数据如何存储和读取 是否支持并发读写 是否支持 index 支持的 query 种类 是否支持主备复制等 1 表引擎概述 ClickHous
  • unity3D之动态的创建球体游戏对象js

    function OnGUI if GUILayout Button 创建立方体 GUILayout Height 50 var objCube GameObject CreatePrimitive PrimitiveType Sphere
  • JS 插入排序

    算法描述 插入排序的算法描述是一种简单直观的排序算法 它的工作原理是通过构建有序序列 对于未排序数据 在已排序序列中从后向前扫描 找到相应位置并插入 一般来说 插入排序都采用in place在数组上实现 具体算法描述如下 从第一个元素开始
  • 【OpenCV4】拉普拉斯算子提取边缘 cv::Laplacian() 用法详解和代码示例(c++)

    作用原理 拉普拉斯算子可以用于边缘检测 同时该算子不具有方向性 可以同时检测到 X 方向和 Y 方向的边缘 综合后检测出图像的边缘 即拉普拉斯算子是 各向同性 的 这在很多情况下是一个优点 因为我们一般来说会同时关注 X 方向和 Y 方向的