OpenCV如何实现拉普拉斯算子的离散模拟

 返回:OpenCV系列文章目录(持续更新中......)

上一篇:OpenCV的Sobel 衍生品
下一篇 :OpenCV 如何实现边缘检测器

目标

在本教程中,您将学习如何:

  • 使用 OpenCV 函数 Laplacian() 实现拉普拉斯算子的离散模拟。

理论

  1. 在上一教程中,我们学习了如何使用 Sobel Operator。它基于这样一个事实,即在边缘区域,像素强度显示“跳跃”或强度的高变化。得到强度的一阶导数,我们观察到边缘的特征是最大值,如图所示:

  1. 和。。。如果我们取二阶导数会发生什么?

您可以观察到二阶导数为零!因此,我们也可以使用此标准来尝试检测图像中的边缘。但是,请注意,零不仅会出现在边缘中(它们实际上可以出现在其他无意义的位置);这可以通过在需要时应用过滤来解决。

拉普拉斯算子

  1. 从上面的解释中,我们推断出二阶导数可用于检测边。由于图像是“*2D*”的,我们需要在两个维度上取导数。在这里,拉普拉斯运算符派上用场。
  2. 拉普拉斯运算符的定义如下:

  • 拉普拉斯运算符由函数 Laplacian() 在 OpenCV 中实现。事实上,由于拉普拉斯使用图像的梯度,它在内部调用 Sobel 算子来执行其计算。

C++代码
 

  1. 这个程序是做什么的?
    • 加载图像
    • 通过应用高斯模糊去除噪点,然后将原始图像转换为灰度
    • 将拉普拉斯运算符应用于灰度图像并存储输出图像
    • 在窗口中显示结果教程代码如下所示。您也可以从这里下载
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"using namespace cv;int main( int argc, char** argv )
{// Declare the variables we are going to useMat src, src_gray, dst;int kernel_size = 3;int scale = 1;int delta = 0;int ddepth = CV_16S;const char* window_name = "Laplace Demo";const char* imageName = argc >=2 ? argv[1] : "lena.jpg";src = imread( samples::findFile( imageName ), IMREAD_COLOR ); // Load an image// Check if image is loaded fineif(src.empty()){printf(" Error opening image\n");printf(" Program Arguments: [image_name -- default lena.jpg] \n");return -1;}// Reduce noise by blurring with a Gaussian filter ( kernel size = 3 )GaussianBlur( src, src, Size(3, 3), 0, 0, BORDER_DEFAULT );cvtColor( src, src_gray, COLOR_BGR2GRAY ); // Convert the image to grayscaleMat abs_dst;Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );// converting back to CV_8UconvertScaleAbs( dst, abs_dst );imshow( window_name, abs_dst );waitKey(0);return 0;
}

解释

声明变量

 // Declare the variables we are going to useMat src, src_gray, dst;int kernel_size = 3;int scale = 1;int delta = 0;int ddepth = CV_16S;const char* window_name = "Laplace Demo";

加载源图像

 const char* imageName = argc >=2 ? argv[1] : "lena.jpg";src = imread( samples::findFile( imageName ), IMREAD_COLOR ); // Load an image// Check if image is loaded fineif(src.empty()){printf(" Error opening image\n");printf(" Program Arguments: [image_name -- default lena.jpg] \n");return -1;}

降低噪音

 // Reduce noise by blurring with a Gaussian filter ( kernel size = 3 )GaussianBlur( src, src, Size(3, 3), 0, 0, BORDER_DEFAULT );

灰度

 cvtColor( src, src_gray, COLOR_BGR2GRAY ); // Convert the image to grayscale

拉普拉斯算子

 Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );
  • 参数是:
    • src_gray:输入图像。
    • dst:目标(输出)图像
    • ddepth:目标图像的深度。由于我们的输入是CV_8U因此我们定义 ddepth = CV_16S 以避免溢出
    • kernel_size:要在内部应用的 Sobel 算子的内核大小。在此示例中,我们使用 3。
    • scaledelta 和 BORDER_DEFAULT:我们将它们保留为默认值。

将输出转换为 <em>CV_8U</em> 图像

 // converting back to CV_8UconvertScaleAbs( dst, abs_dst );

显示结果

 imshow( window_name, abs_dst );waitKey(0);

结果

  1. 编译上面的代码后,我们可以运行它,将图像的路径作为参数。例如,使用作为输入:

  1. 我们得到以下结果。请注意,树木和奶牛的轮廓是如何大致清晰地定义的(除了强度非常相似的区域,即奶牛头部周围)。另外,请注意,树木后面的房子屋顶(右侧)是臭名昭著的标记。这是因为该区域的对比度较高。

参考文献:

1、 《Laplace Operator》---Ana Huamán


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2981341.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Django模型继承之多表继承

在Django模型继承中&#xff0c;支持的第二种模型继承方式是层次结构中的每个模型都是一个单独的模型。每个模型都指向分离的数据表&#xff0c;并且可以被独立查询和创建。在继承关系中&#xff0c;子类和父类之间通过一个自动创建的OneToOneField进行连接。示例代码如下&…

NCF29A1 高端阻抗匹配

一、前言 Class E 高端 L-Front 匹配集成了额外的滤波器&#xff0c;提供了足够的谐波衰减&#xff0c;使 NCF29A1 与天线在比基频更高的频率下具有相当大的增益。向 PA 提供的阻抗和输出电容与表 1 ZPAOUT 所示相同。 二、原理图 图 1 高端 L-Front 匹配原理图 1&#xff…

VNISEdit 制作安装包

1. 环境依赖 1.1. NSIS 下载 下载地址&#xff1a;https://nsis.sourceforge.io/Download 1.2. VNISEdit 下载 下载地址1&#xff1a;https://sourceforge.net/projects/hmne/ 下载 exe 安装。 下载地址2&#xff1a;https://hmne.sourceforge.net/ 可以下载 exe 安装。也…

实体书营销:“三三裂变”,实操细节分享……

实体书营销:“三三裂变”,实操细节分享 一、实验结果 “三三裂变”的实验,结果比较好。就是我们大概有300人报名,但实际行动的只有109人,大概有103人都完成了三个人的目标,也就是说我们通过109人裂变了475人,利润率是1:4.5左右,整个裂变的效率还是可以的,也就是说: …

K-means聚类算法:如何在杂乱无章的数据中找出规律?

什么是K-means聚类算法&#xff1f; 在编程的世界里&#xff0c;K-means聚类算法就像一位无私的指路人&#xff0c;它不需要我们给出明确的指示&#xff0c;只需要我们提供数据&#xff0c;它就能帮助我们找到数据的归属&#xff0c;找到数据的“家”。 K-means聚类算法的名字…

1000. 合并石头的最低成本(H)/ 1312. 让字符串成为回文串的最少插入次数(H)/ 区间DP!!!

1000. 合并石头的最低成本 官方题解&#xff08;含python&#xff09;其他题解 1312. 让字符串成为回文串的最少插入次数 官方题解 class Solution:def minInsertions(self, s: str) -> int:n len(s)# dp[i][j] 表示对于字符串 s 的子串 s[i:j]&#xff08;这里的下标从…

【Python】基础知识(函数与数据容器)

笔者在C语言基础上学习python自用笔记 type() 返回数据类型 name "root" hei 1.8 wei 77 type_hei type(hei) type_wei type(wei) print(type(name)) print(type_hei) print(type_wei)在python中变量是没有类型的&#xff0c;它存储的数据是有类型的。 数据类…

如何删除“上传到移动云盘”右键菜单

问题表现 如题&#xff0c;“上传到移动云盘”的右键菜单非常难删除&#xff0c;按照网上的右键菜单注册表删除通用教程也没找到 解决方法 实际上&#xff0c;该菜单的位置在注册表中的 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AllFilesystemObjects\shell\就是删除里…

Kafka 可视化管理工具 CMAK 启动错误 -- 命令行太长 问题解决

一、安装环境描述&#xff1a; Kafka版本&#xff1a;kafka_2.13-2.8.1cmak 版本&#xff1a;cmak-3.0.0.6安装环境&#xff1a;windows 11 二、问题描述 当我们在 命令行启动 cmak.bat 命令时&#xff0c;会报如下错误&#xff1a; 命令行太长三、解决办法 修改 cmak.bat…

CUDA线程管理

核函数在主机端启动时&#xff0c;执行会转移到设备上&#xff0c;并且将控制权转移回主机。当核函数在GPU上运行时&#xff0c;主机可以运行其他函数。因此&#xff0c;主机与核函数是异步的。 此时&#xff0c;设备端也就是GPU上会产生大量的线程&#xff0c;并且每个线程都…

世界读书日|看看阿里内部的技术大牛们推荐了什么书?

AI 时代&#xff0c;技术呈指数级发展&#xff0c;我们越来越关注&#xff0c;如何持续学习提升&#xff0c;跟上时代的步伐。 刚好借着世界读书日的契机&#xff0c;我们邀请了阿里内部的技术大牛们&#xff0c;分享他们在 AI 时代持续学习的过程中&#xff0c;推荐的一些内容…

黄金行情下跌有投资机会吗?

尽管黄金价格的波动常常引起投资者的高度关注&#xff0c;但行情的下跌未必只是警讯&#xff0c;亦可能蕴藏着某些难得的投资机会。总之&#xff0c;答案是肯定的——在黄金行情下跌时&#xff0c;依旧有适宜的投资机会&#xff0c;只是这需要投资者具备相应的应对知识和策略。…

Msfvenom生成木马实验

E025-渗透测试常用工具-使用msfvenom生成木马进行渗透测试 第一步&#xff0c;打开网络拓扑&#xff0c;点击启动选项&#xff0c;启动实验虚拟机 第二步&#xff0c;使用ifconfig和ipconfig命令分别获取渗透机和靶机的IP地址&#xff0c;使用ping命令进行网络连通性测试&…

关于Java的三个小题目(很容易错!)

第一题 char运算后的数据类型 最后输出的是什么类型&#xff1f; 答案&#xff1a;int char与byte的联系和区别 char是无符号型的&#xff0c;能够表示一个整数&#xff0c;不能表示负数&#xff08;0~65535&#xff09;&#xff1b;而byte是有符号型的&#xff0c;能够表示…

航空业微服务架构中台的构建与实践

随着航空业的快速发展&#xff0c;航空公司需要面对更加复杂的业务环境和客户需求。在这样的背景下&#xff0c;构建一个稳健、高效的微服务架构中台成为了航空公司的当务之急。本文将探讨航空业微服务架构中台的设计理念、关键技术以及实践经验&#xff0c;帮助航空公司构建具…

Jina Reranker 新模型发布,更小、更快、更便宜!

在传统文本搜索技术已经相对成熟的背景下&#xff0c;如何进一步提高搜索的效率和速度成为了新的追求目标。应对这一挑战&#xff0c;Jina Reranker 模型系列推出了两款针对性能调优的新模型&#xff1a;jina-reranker-v1-turbo-en 和 jina-reranker-v1-tiny-en&#xff0c;它们…

矽塔SA6288Q栅极驱动器,可替代峰绍FD6288Q

SA6288 是一款集成了三个独立半桥栅极驱动器&#xff0c;特别适合于三相电机应用中高速功率MOSFET 和 IGBT 的栅极驱动。可在高达250V 电压下工作。 SA6288内置 VCC 和 VBS 欠压&#xff08; UVLO &#xff09;保护功能&#xff0c;防止功率管在过低的电压下工作&#xff0c;…

赛劲SEJINIGB零背隙滚轮齿条齿圈产品助力高精度运动平台

在高度精密化的工业时代&#xff0c;传统齿轮齿条系统所面临的背隙、摩擦粉尘、润滑等问题愈发凸显&#xff0c;这些问题不仅限制了设备的精度和稳定性&#xff0c;还对生产效率和产品质量造成严重影响。为此&#xff0c;赛劲SEJINIGB经过长期研发和技术积累&#xff0c;推出了…

springboot论文格式系统

采用springbootmysqlhtmlvue技术 详细运行视频地址B站运行效果视频地址 &#xff08;1&#xff09;系统具备用户管理功能&#xff0c;包括用户注册、登录、权限管理等功能。 &#xff08;2&#xff09;系统具备格式规范管理功能&#xff0c;包括格式规范创建、编辑、删除等操…

两天速通阿里

感觉这一周太梦幻了&#xff0c;就像一个梦&#xff0c;很不真实~~~ 感觉这个暑期&#xff0c;我的运气占了99成&#xff0c;实力只有百分之一 4.15上午 腾讯csig 腾讯云部门&#xff0c;面完秒进入复试状态 4.16下午 美团优选供应链部门&#xff0c;4.18上午发二面 4.17晚上 阿…