Opencv | 图像卷积与形态学变换操作

这里写目录标题

  • 一. 滤波 / 卷积操作
    • 1. 平滑均值滤波/卷积
    • 2. 平滑中值滤波/卷积
    • 3. 平滑高斯滤波/卷积
      • 3.1 关注区域
      • 3.2 分解特性
  • 二. 形态学变换
    • 1. 常用核
    • 2. cv.erode ( ) 腐蚀操作
    • 3. cv.dilate ( ) 膨胀操作
    • 4. Open 操作
    • 5. Close 操作
    • 6. Morphological Gradient 形态梯度操作
    • 7. Top Hat 获取非交叉点特征 操作
    • 8. Black Hat 获取交叉点特征 操作

一. 滤波 / 卷积操作

在每个图像位置(x,y)上进行基于邻域的函数计算,其中函数参数被称为卷积核 (kernel)

  • kernel核的尺寸通常为奇数,一般为: 3 ∗ 3 、 5 ∗ 5 、 7 ∗ 7 3*3、5*5、7*7 335577

不同功能需要定义不同的函数,其中功能可以有:

  1. 图像增强:
              平滑 / 去噪
              梯度 / 锐化

  2. 特征提取、检测:
              边缘 / 显著点
    在这里插入图片描述

    卷积语法dst = cv.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])参数:src:输入图像ddepth:输出图像的深度,当其值为-1时,输出图像与输入图像具有相同的深度kernel:卷积核,用于计算每个像素值的矩阵dst:输出图像(可选参数)如果未提供,则会创建一个新的图像anchor:卷积核的锚点默认值为(-1, -1),表示锚点位于卷积核的中心delta:在将结果存储到输出图像之前,将添加到每个像素的值(可选参数),默认为0borderType:像素外推方法(可选参数)用于指定当卷积核超出图像边界时如何处理边界像素
    

1. 平滑均值滤波/卷积

kernel核中的参数和为1,所有参数值全部一样

	属于线性滤波技术适用场景:适合于去除图像中的随机噪声适用于消除高斯噪声和相机失真可用于提取较大目标前过滤掉较小的细节或将目标内的小间断连接起来作用:通过降低图像中的高频分量,减少噪声图像整体显得更加平滑可能会牺牲一些图像细节

2. 平滑中值滤波/卷积

kernel核有固定的大小,没有固定的值

	属于非线性滤波方法适用场景:有效去除椒盐噪声操作原理: 将卷积域内的所有像素值从小到大排序 获取中间值作为卷积的输出值作用:消除图像中的孤立噪声点去除噪声的同时保留图像的边缘特征:不依赖于像素点的具体数值,而是取决于它们的相对排序

在这里插入图片描述

	cv2.medianBlur(src, ksize[, dst])参数:src:输入图像,通常为一个二维的灰度图像ksize:一个奇数整数,表示滤波器的大小dst(可选):输出图像,与输入图像具有相同的大小和类型

3. 平滑高斯滤波/卷积

G σ = 1 2 π σ 2 e − ( x 2 + y 2 ) 2 σ 2 G_{\sigma}=\frac{1}{2 \pi \sigma^{2}} e^{-\frac{\left(x^{2}+y^{2}\right)}{2 \sigma^{2}}} Gσ=2πσ21e2σ2(x2+y2)

可以有效去除高斯噪声

	线性平滑技术cv2.GaussianBlur(src, ksize, sigmaX[, sigmaY[, borderType]])参数: src:原始图像ksize:滤波核的大小,滤波核的值必须是奇数sigmaX:卷积核在水平方向上(X轴方向)的标准差,控制权重比例sigmaY:卷积核在垂直方向上(Y轴方向)的标准差,控制权重比例如果sigmaY参数未指定,则其值将默认与sigmaX相同borderType:边界类型,用于指定图像边界的处理方法

3.1 关注区域

平滑高斯滤波模拟人眼,关注中心区域
在这里插入图片描述

平滑高斯滤波/卷积
σ σ σ越小,关注区域越小
σ σ σ越大,图片整体越模糊

在这里插入图片描述

3.2 分解特性

G σ ( x , y ) = 1 2 π σ 2 exp ⁡ − x 2 + y 2 2 σ 2 = ( 1 2 π σ exp ⁡ − x 2 2 σ 2 ) ( 1 2 π σ exp ⁡ − y 2 2 σ 2 ) G_{\sigma}(x, y)=\frac{1}{2 \pi \sigma^{2}} \exp -\frac{x^{2}+y^{2}}{2 \sigma^{2}}=\left(\frac{1}{\sqrt{2 \pi} \sigma} \exp ^{-\frac{x^{2}}{2 \sigma^{2}}}\right)\left(\frac{1}{\sqrt{2 \pi} \sigma} \exp ^{-\frac{y^{2}}{2 \sigma^{2}}}\right) Gσ(x,y)=2πσ21exp2σ2x2+y2=(2π σ1exp2σ2x2)(2π σ1exp2σ2y2)

	分解特性(级联高斯) 2D卷积拆分为两个相同的1D卷积 列卷积 	行卷积 降低计算 2D卷积:K^2次计算 1D卷积:2K次计算

在这里插入图片描述

二. 形态学变换

	cv2.morphologyEx(src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])参数:src:源图像,必须是单通道的灰度图像op:形态学操作的类型,包括:cv2.MORPH_ERODE(腐蚀)cv2.MORPH_DILATE(膨胀)cv2.MORPH_OPEN(开运算)cv2.MORPH_CLOSE(闭运算)cv.MORPH_GRADIENT (形态梯度/边缘特征)cv.MORPH_TOPHAT(提取非交叉点的信息)kernel:结构元素,用于指定形态学操作的邻域形状和大小通常是一种特殊的形状,如线条、矩形、圆形等anchor:结构元素的锚点,默认值为Point(-1, -1),表示锚点位于结构元素的中心iterations:操作的迭代次数,默认值为1borderType:像素外推法的类型,默认为cv2.BORDER_CONSTANTborderValue:当使用cv2.BORDER_CONSTANT像素外推法时,此参数表示边界值,默认值为morphologyDefaultBorderValue()作用:根据指定的操作类型和结构元素对输入图像进行相应的形态学处理

1. 常用核

	cv2.getStructuringElement(shape, ksize[, anchor])参数:shape:结构元素的形状,可以是以下值之一cv2.MORPH_RECT(矩形)cv2.MORPH_ELLIPSE(椭圆)cv2.MORPH_CROSS(十字形)ksize:结构元素的大小,表示为一个元组anchor(可选):结构元素的锚点,表示为一个元组作用:生成指定形状和大小的结构元素,结构元素通常用于形态学操作,如腐蚀、膨胀、开运算和闭运算等

2. cv.erode ( ) 腐蚀操作

	cv.erode(src, kernel[, iterations])参数:src:表示输入图像;通道数不限深度必须是CV_8U,即8位无符号整数类型的单通道图像kernel:表示结构元素,通常是一个二维矩阵,用于确定腐蚀操作过程中邻域的形状腐蚀操作中,会选择卷积核中非0元素所覆盖区域中的最小值,作为输出图像(dst)中的像素值iterations:表示腐蚀操作的迭代次数,默认值为1多次迭代会使得腐蚀效果更加显著。操作:在图像(x,y)像素点的邻域中,选择像素最小值作为像素点(x,y)的像素值,即最小值滤波/卷积作用:消除物体的边界点,使边界向内收缩,常用于去除小的物体或连接两个有细小连通的物体

3. cv.dilate ( ) 膨胀操作

	cv.dilate(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])参数:src:输入图像,通常为二值图像kernel:膨胀操作所使用的结构元素可以使用cv2.getStructuringElement()函数生成dst:输出图像,与输入图像大小和类型相同anchor:结构元素的锚点默认值为(-1, -1),表示锚点位于结构元素的中心iterations:膨胀操作的迭代次数,默认值为1borderType:边界处理类型,默认值为cv2.BORDER_CONSTANTborderValue:边界处理时使用的常数值,默认值为0操作:在图像(x,y)像素点的邻域中,选择像素最大值作为像素点(x,y)的像素值,即最大值滤波/卷积作用:扩大图像中的白色区域(前景),从而消除一些小的黑色区域(背景)膨胀操作通常用于去除噪声、连接相邻物体等

4. Open 操作

	方式1:cv2.morphologyEx( )方式2:cv.erode( ) + cv.dilate( )作用:先腐蚀后膨胀

5. Close 操作

	方式1:cv2.morphologyEx( )方式2:cv.dilate( ) + cv.erode( ) 作用:先膨胀后腐蚀

6. Morphological Gradient 形态梯度操作

在这里插入图片描述
cv.morphologyEx(img, op=cv.MORPH_GRADIENT, kernel=kernel, iterations=1)cv.morphologyEx( )

7. Top Hat 获取非交叉点特征 操作

在这里插入图片描述

	cv.morphologyEx(img, op=cv.MORPH_TOPHAT, kernel=kernel, iterations=1)

8. Black Hat 获取交叉点特征 操作

在这里插入图片描述

	cv.morphologyEx(img, op=cv.MORPH_BLACKHAT, kernel=kernel, iterations=1)

感谢阅读🌼
如果喜欢这篇文章,记得点赞👍和转发🔄哦!
有任何想法或问题,欢迎留言交流💬,我们下次见!
本文相关代码存放位置
    【】

祝愉快🌟!


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式之创建型模式---工厂模式

文章目录 工厂模式概述简单工厂简单工厂的代码实现简单工厂的使用简单工厂应用场景 工厂方法工厂方法模式的代码实现工厂方法的使用工厂方法应用场景 抽象工厂抽象工厂模式代码实现抽象工厂的使用方法抽象工厂模式的应用场景 总结 工厂模式概述 工厂模式从名字就能看出&#x…

查看文件的权限和实际类型

该文件确实存在于指定的位置。可以使用 ls 命令来检查文件是否存在,以及确认文件路径是否正确。 ls -l xxx.xx权限问题: 确保你有权限读取该文件。如果该文件位于受限制的目录中,可能需要使用 sudo 或其他管理员权限来运行命令。 文件格式不正确: 如果…

JS走马灯小功能制作

HTML代码&#xff1a; <div id"contain"><div id"content"> 作文&#xff0c;怎样才能写好&#xff1f;作文&#xff0c;好于勤读&#xff0c;作文&#xff0c;优于真情。作文一词&#xff0c;汇于欲要看究竟&#xff0c;处处细留心。作文于此…

损失函数汇总

kl 在多分类问题中&#xff0c;KL&#xff08;Kullback-Leibler&#xff09;损失通常用于衡量模型预测的概率分布与真实标签的概率分布之间的差异。在多分类任务中&#xff0c;通常使用交叉熵损失&#xff08;Cross Entropy Loss&#xff09;作为主要的损失函数&#xff0c;但…

Threejs绘制传送带

接下来会做一个MES场景下的数字孪生&#xff0c;所以开始做车间相关的模型&#xff0c;不过还是尽量少用建模&#xff0c;纯代码实现&#xff0c;因为一方面可以动态使用&#xff0c;可以调节长度和宽度等&#xff0c; 下面这节就做一个简单的传送带&#xff0c;这是所有车间都…

c++计算DNA探针的熔解温度

DNA探针的熔解温度(Tm)是指DNA双链在解离过程中的温度,可以用来估计DNA探针与靶序列的结合强度。 DNA探针富集实验中使用的盐浓度通常是在高盐条件下进行的,以帮助DNA与探针结合并提高富集效率。一般来说,盐浓度在0.5 M到1 M之间是常见的范围,但具体的盐浓度会根据实验的…

基础SQL DML-插入语句

插入语句前&#xff0c;我们先创建一个表。表的创建在DDL语句里面涉及&#xff0c;可以参考&#xff1a;小赖同学吖-CSDN博客 我们创建一个员工表进行数据的插入操作 插入&#xff08;添加&#xff09;语句的语法 给员工表添加一条记录 给员工表添加多条记录 也可以通过下面的方…

年薪5.8万美元|临床医生赴美国康奈尔大学从事博士后研究

作为临床医学8年制的博士毕业生&#xff0c;A医生希望能到国外从事一段时间的博士后&#xff0c;以强化基础科研训练&#xff0c;弥补职业发展的短板。最终我们为其申请到康奈尔大学Weill Cornell医学院的博士后职位&#xff0c;年薪为5.8万美元。 A医生背景&#xff1a; 申请…

C语言项目实践——贪吃蛇

引言&#xff1a;本篇博客中&#xff0c;我将会使用结构体&#xff0c;链表&#xff0c;WIN32 API等一系列知识完成C语言项目——贪吃蛇的实现。在观看此篇博客之前&#xff0c;请将这些知识所熟悉&#xff0c;不然可能会造成理解困难。 更多有关C语言的知识详解可前往个人主页…

【C++】explicit关键字详解(explicit关键字是什么? 为什么需要explicit关键字? 如何使用explicit 关键字)

目录 一、前言 二、explicit关键字是什么&#xff1f; 三、构造函数还具有类型转换的作用 &#x1f34e;单参构造函数 ✨引出 explicit 关键字 &#x1f34d;多参构造函数 ✨为什么需要explicit关键字&#xff1f; ✨怎么使用explicit关键字&#xff1f; 四、总结 五…

CentOS 7离线升级OpenSSH至9.1p1操作过程及遇上的问题

在文章顶部下载适用于CentOS7的OpenSSH 9.1p1 rpm包&#xff0c;包含了服务器和客户端。 默认全部以root用户权限执行命令。 简单版 懒得看的话&#xff0c;复制以下4行命令执行即可。 tar -zxvf centos7-openssh-9.1p1.tar.gz rpm -Uvh openssh-9.1p1-1.tl2.x86_64.rpm op…

第十四届蓝桥杯 子串简写 | 树状数组解法

Problem: 第十四届蓝桥杯 子串简写 程序猿圈子里正在流行一种很新的简写方法&#xff1a; 对于一个字符串&#xff0c;只保留首尾字符&#xff0c;将首尾字符之间的所有字符用这部分的长度代替。 例如 internationalization 简写成 i18n&#xff0c;Kubernetes 简写成 K8s&am…

npx\pnpm 镜像过期解决方法

. // 1. 清空缓存 npm cache clean --force // 2. 关闭SSL验证 npm config set strict-ssl false // 3. 安装 到这里就可以正常使用npm命令安装需要的工具了。如( npm install -g cnpm )

虚拟机中使用LNMP模拟跨域并结合前端代码解决CORS跨域的简单示例

目录 一、首先&#xff0c;下载lnmp_soft.tar.gz压缩包 二、解压lnmp_soft.tar.gz和下载相关的依赖&#xff0c;插件 三、修改/usr/local/nginx/conf/nginx.conf配置文件 四、/usr/local/nginx/sbin/nginx命令启动nginx 五、在/usr/local/nginx/html目录下新建80.html&…

D. Nene and the Mex Operator - dfs + 位运算枚举

题面 分析 将一段区间[l, r]变成最大&#xff0c;可以遵循以下规则&#xff0c;先对第一个数进行操作&#xff0c;如果他是0&#xff0c; 那么会变成1&#xff0c;所以不进行操作&#xff0c;如果不是0&#xff0c;就要进行操作&#xff0c;让它变成0&#xff0c;只有这样才能…

书生·浦语大模型实战营之微调 Llama 3 实践与教程 (XTuner 版)

书生浦语大模型实战营之微调 Llama 3 实践与教程 (XTuner 版) Llama 3 近期重磅发布,发布了 8B 和 70B 参数量的模型,XTuner 团队对 Llama 3 微调进行了光速支持!!!开源同时社区中涌现了 Llama3-XTuner-CN 手把手教大家使用 XTuner 微调 Llama 3 模型。 XTuner:http:/…

图深度学习——2.图的理论知识

1.图 1.1 图的定义 图是由节点&#xff08;顶点&#xff09;和边构成的数学结构。图用于表示对象之间的关系&#xff0c;其中节点表示对象&#xff0c;边表示对象之间的关系。 一个图&#xff0c;记为 G <V, E> &#xff0c;它包括以下两个要素&#xff1a; 1.节点&am…

[C++ 多线程并发] std::async

c11中增加了线程&#xff0c;使得我们可以非常方便的创建线程&#xff0c;它的基本用法是这样的&#xff1a; void f(int n); std::thread t(f, n 1); t.join();但是线程毕竟是属于比较低层次的东西&#xff0c;有时候使用有些不便&#xff0c;比如我希望获取线程函数的返回结…

第22天:安全开发-PHP应用留言板功能超全局变量数据库操作第三方插件引用

第二十二天 一、PHP留言板前后端功能实现 开发环境&#xff1a; DW PHPStorm PhpStudy Navicat Premium DW : HTML&JS&CSS开发 PHPStorm : 专业PHP开发IDE PhpStudy &#xff1a;Apache MYSQL环境 Navicat Premium: 全能数据库管理工具 二、数据库创建&架…

机器学习(三)之监督学习2

前言&#xff1a; 本专栏一直在更新机器学习的内容&#xff0c;欢迎点赞收藏哦&#xff01; 笔者水平有限&#xff0c;文中掺杂着自己的理解和感悟&#xff0c;如果有错误之处还请指出&#xff0c;可以在评论区一起探讨&#xff01; 1.支持向量机&#xff08;Support Vector Ma…