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.hqwc.cn/news/641024.html

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

相关文章

基于postCSS手写postcss-px-to-vewiport插件实现移动端适配

🌟前言 目前前端实现移动端适配方案千千万,眼花缭乱各有有缺,但目前来说postcss-px-to-vewiport是一种非常合适的实现方案,postcss-px-to-vewiport是一个基于postCss开发的插件,其原理就是将项目中的px单位转换为vw(视…

向量的点积和叉积的几何意义

1. 点积 点积(dot product),又称标量积(scalar product)。结果等于。 可用于 判断的是否垂直求投影长度求向量是抑制作用还是促进作用 2. 叉积 叉积(cross product),又称为向量积(vector product)。模长等于,方向…

深入剖析机器学习领域的璀璨明珠——支持向量机算法

在机器学习的广袤星空中,支持向量机(Support Vector Machine,简称SVM)无疑是一颗璀璨的明珠。它以其独特的分类能力和强大的泛化性能,在数据分类、模式识别、回归分析等领域大放异彩。本文将详细剖析SVM算法的原理、特…

政安晨:【Keras机器学习示例演绎】(十)—— 用于读取验证码的 OCR 模型

目录 简介 设置 加载数据验证码图像 预处理 创建数据集对象 将数据可视化 模型 培训 推理 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益,如有不足之…

HTML随机点名程序

案例要求 1.点击点名按钮&#xff0c;名字界面随机显示&#xff0c;按钮文字由点名变为停止 2.再次点击点名按钮&#xff0c;显示当前被点名学生姓名&#xff0c;按钮文字由停止变为点名 案例源码 <!DOCTYPE html> <html lang"en"> <head> <m…

03-JAVA设计模式-中介者模式

中介者模式 什么是中介者模式 中介者模式&#xff08;Mediator Pattern&#xff09;是一种行为设计模式&#xff0c;用于减少对象之间的直接依赖关系&#xff0c;降低它们之间的耦合度&#xff0c;并使得一个对象改变时&#xff0c;所有依赖于它的对象都得到通知并自动更新。…

【计算机组成原理】浮点运算方法和浮点运算器

浮点加法、减法运算 浮点数加减法的步骤结合题目分析步骤 浮点数加减法的步骤 ① 0 操作数检查 ② 比较阶码大小&#xff0c;完成对阶 ③ 尾数进行加减法运算 ④ 结果规格化 ⑤ 舍入处理 ⑥ 判断结果是否溢出 结合题目分析步骤 例&#xff1a;设 x 2010 0.11011011&#x…

绿联 安装transmission

绿联 安装transmission及中文UI 1、镜像 linuxserver/transmission:latest 2、安装 2.1、创建容器 按需配置权重。 2.2、基础设置 2.3、网络 桥接即可。 注&#xff1a;如果使用IPV6&#xff0c;请选择"host"模式。 注&#xff1a;如果使用IPV6&#xff0c;请选…

【AI】Deepstream入门(2)Ubuntu20.04安装Deepstream

1、安装GPU驱动 本人显卡型号:RTX4060 Laptop(笔记本专用显卡) 【AI】惠普暗夜精灵9安装Ubuntu20.04+nvidia驱动 2、安装cuda、cuDNN 【AI】Ubuntu20.04安装cuda、cuDNN 3、安装TensorRT 1)下载 下载地址:https://docs.nvidia.com/deeplearning/tensorrt/archives/i…

海康Visionmaster-常见问题排查方法-安装阶段

VM软加密安装失败&#xff0c;报错&#xff1a;软件未激活&#xff0c;是否进行授权激活&#xff1b; 解决方法&#xff1a;如确认已完成授权&#xff0c;此时打上试用用补丁即可。补充VM400试用版本正确安装顺序如下&#xff1a; 安装顺序&#xff1a; ①安装基础安装包&…

Day39 网络编程(一):计算机网络,网络编程,网络模型,网络编程三要素

Day39 网络编程&#xff08;一&#xff09;&#xff1a;计算机网络&#xff0c;网络编程&#xff0c;网络模型&#xff0c;网络编程三要素 文章目录 Day39 网络编程&#xff08;一&#xff09;&#xff1a;计算机网络&#xff0c;网络编程&#xff0c;网络模型&#xff0c;网络…

AI时代,我要如何学习,才能跟上步伐

在21世纪这个被数据驱动的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面。无论是智能手机中的语音助手、在线客服的聊天机器人&#xff0c;还是自动驾驶汽车&#xff0c;AI的应用都在告诉我们一个信息&#xff1a;未来已来。因此&#xff0…