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:
    			在将结果存储到输出图像之前,将添加到每个像素的值(可选参数),默认为0
    		borderType:
    			像素外推方法(可选参数)
    			用于指定当卷积核超出图像边界时如何处理边界像素
    

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:操作的迭代次数,默认值为1
		borderType:像素外推法的类型,默认为cv2.BORDER_CONSTANT
		borderValue:当使用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:膨胀操作的迭代次数,默认值为1
		borderType:边界处理类型,默认值为cv2.BORDER_CONSTANT
		borderValue:边界处理时使用的常数值,默认值为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)

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

祝愉快🌟!


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32F4 Hal库中IO外部中断(EXIT)的应用

目录 概述 1 中断和事件 1.1 外部中断/事件控制器 (EXTI) 1.2 EXTI主要特性 1.3 中断和事件的差别 1.3.1 中断产生流程 1.3.2 事件产生流程 1.3.3 STM32F4的事件 2 STM32Cube配置工程 2.1 外部中断/事件介绍 2.2 配置参数 2.3 生成Project 3 STM32F4 Hal库中外部中…

0.什么是C++(专栏前言)

目录 1.什么是C 2.C的发展史 3.C的重要性 应用: 4.如何学习C 5.关于本专栏 1.什么是C 20世纪80年代,计算机界提出oop(object oriented programming:面向对象)思想,支持面向对象的程序设计应运而生。 1982年,本…

学习笔记:尚硅谷Vue2基础篇

Vue2 学习笔记:Vue2基础篇_ljtxy.love的博客-CSDN博客学习笔记:Vue2中级篇_ljtxy.love的博客-CSDN博客学习笔记:Vue2高级篇_ljtxy.love的博客-CSDN博客 Vue3 学习笔记:Vue3_ljtxy.love的博客)-CSDN博客 文章目录 1.…

web前端学习笔记1

前端学习笔记 1. 走进HTML 1.1 什么是HTML 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。您可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上,由浏览器来解析。HTML文档的后缀名 .html.htm以上两种后缀名没有区别…

为什么单片机控制电机需要加电机驱动

通常很多地方只是单纯的单片机MCU没有对电机的驱动能力,或者是介绍关于电机驱动的作用,如: 提高电机的效率和精度。驱动器采用先进的电子技术和控制算法,能够精准控制电机的参数和运行状态,提高了电机的效率和精度。拓…

ESP32与SD卡交互实现:文件读写实战与初始化详解及引脚定义

本代码实现ESP32与SD卡的交互,包括定义SPI引脚、创建自定义SPI类实例、编写WriteFile与ReadFile函数进行文件读写。setup函数初始化串口、SPI、SD卡,向“/test.txt”写入“myfirstmessage”,读取并打印其内容。loop函数留空待扩展。 1. 需要…

系统安全与应用(1)

目录 1、账号安全管理 (1)禁止程序用户登录 (2)锁定禁用长期不使用的用户 (3)删除无用的账号 (4)禁止账号和密码的修改 2、密码安全管理 设置密码有效期 1)针对已…

中颖51芯片学习9. PWM(12bit脉冲宽度调制)

中颖51芯片学习9. PWM(12bit脉冲宽度调制) 一、资源简介二、PWM工作流程三、寄存器介绍1. PWMx控制寄存器PWMxCON2. PWM0周期寄存器PWM0PH/L3. PWM1周期寄存器PWM1PH/L4. PWM0占空比控制寄存器PWM0DH/L5. PWM1占空比控制寄存器 PWM1DH/L6. 占空比寄存器与…

Next.js+React+Node系统实战,搞定SSR服务器渲染

Next.jsReactNode系统实战,搞定SSR服务器渲染 Next.js React Node.js 实战:实现服务器端渲染(SSR) 项目概述 在这个项目中,我们将探讨如何使用 Next.js、React 和 Node.js 来构建一个服务器渲染的 web 应用程序。通…

pytest使用 pytest-rerunfailures 插件实现失败用例重跑功能

使用 pytest 进行测试时,你可以通过安装并配置 pytest-rerunfailures 插件来实现失败用例重跑功能。以下是一个示例说明: 假设你有一个测试文件 test_example.py 包含如下测试用例: import pytestpytest.mark.parametrize("num",…

javaScript3

javaScript 一.对象1.概念2.创建对象的三种方法(1).字面量创建(利用{})(2)变量、属性、函数、方法的区别(3).new Object创建(4).构造函数 3.new关键字的执行过程4.遍历对象(for..in) 二.内置对象 一.对象 1.概念 一组无序的相关属性和方法的…

报错The chromedriver version cannot be discovered以及下载chromedriver.exe和查看其版本的命令

python3.8.10,win10。 谷歌浏览器版本(我写代码的时候还是123.0.x.x,没几天就自动更新到124.0.x.x了): 在使用selenium的时候,出现报错,The chromedriver version cannot be discovered。 &am…

【面试八股总结】Linux系统下的I/O多路复用

参考资料 :小林Coding、阿秀、代码随想录 I/O多路复用是⼀种在单个线程或进程中处理多个输入和输出操作的机制。它允许单个进程同时监视多个文件描述符(通常是套接字),一旦某个描述符就绪(一般是读就绪或者写就绪),能够…

为什么iPhone支持整页中文OCR应用很少?有什么好的解决方法?

iPhone上面没有支持中文整页OCR识别的app,这是一个值得探讨的问题。OCR,即光学字符识别,是一种将纸质文档或图片中的文字转化为可编辑文本的技术。随着科技的发展,OCR技术已经广泛应用于各个领域,包括文档处理、图像识…

C/C++ 入门(7)string类(STL)

个人主页:仍有未知等待探索-CSDN博客 专题分栏:C 请多多指教! 目录 一、标准库中的string 1、了解 2、string类常用接口说明 1、常见的构造函数 2、容量操作 ​编辑 3、访问及遍历操作 4、修改操作 5、非成员函数 二、string类实现 …

搭建知识库-DataWhale笔记

词向量及向量知识库介绍 词向量 词向量定义 在机器学习和自然语言处理(NLP)中,词向量(Embeddings)是一种将非结构化数据,如单词、句子或者整个文档,转化为实数向量的技术。这些实数向量可以被…

Unet网络架构讲解(从零到一,逐行编写并重点讲解数据维度变化)

📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️感谢大家点赞👍&…

大珩PPT助手一键颜色设置

大珩PPT助手最新推出的一键设置文字颜色和背景色功能,为用户在创建演示文稿时带来了更便捷、高效的体验。这一功能使用户能够轻松调整演示文稿中文字的颜色和幻灯片的背景色,以满足不同场合和主题的需要。 以下是该功能的几个关键特点和优势&#xff1a…

恶意游戏并非传说:它们甚至在 Steam 上也存在

三月份,玩家们在在线平台上遇到了热门游戏的假克隆。在受害者中,有一位用户购买了一款假冒游戏《最后纪元》(Last Epoch),但玩了几个小时后却出现了 "蓝屏死机"。 在联系了技术支持后,Steam 将钱…

代码随想录算法训练营Day6 | 242.有效的字母异位词 ●349. 两个数组的交集 ● 202. 快乐数● 1. 两数之和

基础: 1.哈希表是根据关键值进行直接访问的数据结构,时间复杂度是O(1),也就是通过数组的索引下标,直接访问数组中的元素哈希表的作用就是用来快速判断一个元素是否出现在集合里。 2.常见的哈希结构: 数组set &#…