opencv 30 -图像平滑处理01-均值滤波 cv2.blur()
什么是图像平滑处理?
图像平滑处理(Image
Smoothing)是一种图像处理技术,旨在减少图像中的噪声、去除细节并平滑图像的过渡部分。这种处理常用于预处理图像,以便在后续图像处理任务中获得更好的结果。
常用的图像平滑处理方法包括:
均值滤波(Mean Filtering):用图像中像素周围区域的平均值来代替每个像素的值,从而平滑图像。均值滤波对去除高斯噪声等简单噪声类型效果较好。
高斯滤波(Gaussian Filtering):使用高斯核来对图像进行滤波,高斯滤波在平滑图像的同时能够较好地保留图像的边缘信息。
中值滤波(Median Filtering):用像素周围区域像素值的中值来代替每个像素的值,适用于去除椒盐噪声等脉冲型噪声。
双边滤波(Bilateral Filtering):结合空间域和灰度值域的信息,能够保持图像的边缘特征,同时对图像进行平滑处理。
图像平滑处理应用场景
图像平滑处理在图像处理中有广泛的应用场景,主要用于去除图像中的噪声、减少细节、平滑图像的过渡部分,从而提升后续图像处理任务的效果。
以下是图像平滑处理的一些常见应用场景:
去噪声:图像中可能存在不同类型的噪声,如高斯噪声、椒盐噪声等。使用图像平滑处理方法可以有效地减少这些噪声,提高图像质量。
在尽量保留图像原有信息的情况下,过滤掉图像内部的噪声,这一过程称为对图像的平滑
处理,所得的图像称为平滑图像。例如,下图是含有噪声的图像,在图像内存在噪声信息,
我们通常会通过图像平滑处理等方式去除这些噪声信息。

通过图像平滑处理,可以有效地过滤掉图像内的噪声信息。再看下面得图 所示是对上面图 进行图像平滑处理的结果,可以看到原有图像内含有的噪声信息被有效地过滤掉了。

图像降噪:在低光条件下或者高ISO值下拍摄的图像可能会有较多的噪点。通过图像平滑处理,可以降低噪点的影响,使图像看起来更加干净和清晰。
图像模糊:在某些情况下,我们可能希望减少图像中的细节,使图像变得模糊,以达到某种特定的效果。图像平滑处理可以实现这个目标。
图像缩放:当对图像进行缩放操作时,可能会引入锯齿效应或马赛克现象。通过图像平滑处理,可以减少这些不平滑的现象,得到更平滑的缩放图像。
边缘检测:在进行边缘检测等图像处理任务时,图像平滑处理可以帮助去除细节,使边缘更加清晰和明显。
目标检测和识别:在某些情况下,图像中的细节和噪声可能会干扰目标检测和识别算法。通过图像平滑处理,可以消除这些干扰,提高目标检测和识别的准确性。
总的来说,图像平滑处理是图像预处理的重要步骤,它能够改善图像质量、减少噪声和细节,为后续图像处理任务提供更好的输入。不过需要注意,过度的平滑处理可能会导致图像失真和信息丢失,因此在应用图像平滑处理时需要权衡处理效果和影响。
均值滤波
定义:
均值滤波是指用当前像素点周围 N·N 个像素值的均值来代替当前像素值。使用该方法遍历处理图像内的每一个像素点,即可完成整幅图像的均值滤波。
例如,希望对图 下图 中位于第 5 行第 5 列的像素点进行均值滤波。

在进行均值滤波时,首先要考虑需要对周围多少个像素点取平均值。通常情况下,我们会
以当前像素点为中心,对行数和列数相等的一块区域内的所有像素点的像素值求平均。例如,
在上图 中,可以以当前 226 像素点为中心,对周围 3×3 区域内所有像素点的像素值求平均,也可以对周围 5×5 区域内所有像素点的像素值求平均。
当前像素点的位置为第 5 行第 5 列,我们对其周围 5×5 区域内的像素值求平均,计算方法为:
新值=[(197+25+106+156+159)+
(149+40+107+5+71)+
(163+198+226+223+156)+
(222+37+68+193+157)+
(42+72+250+41+75)]/25
=126
计算完成后得到 126,我们将 126 作为当前像素点均值滤波后的像素值。我们针对上图 中的每一个像素点计算其周围 5×5 区域内的像素值均值,并将其作为当前像素点的新值,即可
得到当前图像的均值滤波结果。
当然,图像的边界点并不存在 5×5 邻域区域。例如,左上角第 1 行第 1 列上的像素点,其像素值为 23,如果以其为中心点取周围 5×5 邻域,则 5×5 邻域中的部分区域位于图像外部。
图像外部是没有像素点和像素值的,显然是无法计算该点的 5×5 邻域均值的。
针对边缘像素点,可以只取图像内存在的周围邻域点的像素值均值。
如图 7-8 所示,计算
左上角的均值滤波结果时,仅取图中灰色背景的 3×3 邻域内的像素值的平均值。

在图 7-8 中,对于左上角(第 1 行第 1 列)的像素点,我们取第 1~3 列与第 1~3 行交汇处
所包含的 3×3 邻域内的像素点的像素值均值。因此,当前像素点的均值滤波计算方法为:
新值=[(23+158+140)+
(238+0+67)+
(199+197+25)]/9
=116
计算完成后得到 116,将该值作为该点的滤波结果即可
除此以外,还可以扩展当前图像的周围像素点。例如,将当前 9×7 大小的图像扩展为 13×11大小的图像,如图 7-9 所示。

完成图像边缘扩展后,可以在新增的行列内填充不同的像素值。在此基础上,再针对 9×7的原始图像计算其 5×5 邻域内像素点的像素值均值。OpenCV 提供了多种边界处理方式,我们可以根据实际需要选用不同的边界处理模式。
针对图像中第 5 行第 5 列的像素点,其运算过程相当于与一个内部值都是 1/25 的 5×5 矩阵进行相乘计算,从而得到均值滤波的结果 126,其对应的关系如图 7-10 所示

根据上述运算,针对每一个像素点,都是与一个内部值均为 1/25 的 5×5 矩阵相乘,得到均值滤波的计算结果,如图 7-11 所示。

将使用的 5×5 矩阵一般化,可以得到如图 7-12 所示的结果。

OpenCV 中,图 7-12 右侧的矩阵被称为卷积核,其一般形式为:

式中,M 和 N 分别对应高度和宽度。一般情况下,M 和 N 是相等的,例如比较常用的 3×3、5×5、
7×7 等。如果 M 和 N 的值越大,参与运算的像素点数量就越多,图像失真越严重。
函数语法
OpenCV 中,实现均值滤波的函数是 cv2.blur(),其语法格式为:
dst = cv2.blur( src, ksize, anchor, borderType )
式中:
dst 是返回值,表示进行均值滤波后得到的处理结果。
src 是需要处理的图像,即原始图像。它可以有任意数量的通道,并能对各个通道独立处理。图像深度应该是 CV_8U、CV_16U、CV_16S、CV_32F 或者 CV_64F 中的一种。
ksize 是滤波核的大小。滤波核大小是指在均值处理过程中,其邻域图像的高度和宽度。
例如,其值可以为(5, 5),表示以 5×5 大小的邻域均值作为图像均值滤波处理的结果,
如下式所示。

anchor 是锚点,其默认值是(-1, -1),表示当前计算均值的点位于核的中心点位置。该值使用默认值即可,在特殊情况下可以指定不同的点作为锚点。
borderType 是边界样式,该值决定了以何种方式处理边界,其值如表 7-1 所示。一般情
况下不需要考虑该值的取值,直接采用默认值即可。

通常情况下,使用均值滤波函数时,对于锚点 anchor 和边界样式 borderType,直接采用其
默认值即可。因此,函数 cv2.blur()的一般形式为:
dst = cv2.blur( src, ksize,)
实验: 读取一幅噪声图像,使用函数 cv2.blur()对图像进行均值滤波处理,得到去噪图像,并显示原始图像和去噪图像
实验原图

import cv2
o=cv2.imread("lenaNoise.png") #读取待处理图像
#使用 blur 函数处理图像
r=cv2.blur(o,(5,5))
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()
运行上述程序后,会分别显示噪声图像(左图)和去噪图像(右图)

实验2:针对噪声图像,使用不同大小的卷积核对其进行均值滤波,并显示均值滤波的情况。
调整设置函数 cv2.blur()中的 ksize 参数,示例代码如下
代码如下:
import cv2
o=cv2.imread("lenaNoise.png") #读取待处理图像
#使用 blur 函数处理图像
r3=cv2.blur(o,(3,3))
r5=cv2.blur(o,(5,5))
r7=cv2.blur(o,(7,7))
cv2.imshow("original",o)
cv2.imshow("result3",r3)
cv2.imshow("result5",r5)
cv2.imshow("result7",r7)
cv2.waitKey()
cv2.destroyAllWindows()

从结果图中可以看出,卷积核越来,图片会越模糊.
相关文章:
opencv 30 -图像平滑处理01-均值滤波 cv2.blur()
什么是图像平滑处理? 图像平滑处理(Image Smoothing)是一种图像处理技术,旨在减少图像中的噪声、去除细节并平滑图像的过渡部分。这种处理常用于预处理图像,以便在后续图像处理任务中获得更好的结果。 常用的图像平滑处理方法包括…...
中小企业的数字化营销应该如何着手?数字化营销到底要怎么做?
从侠义角度讲,数字化营销就是在数字化的媒体上做营销。传播本质上是一种营销的形式 从广义角度讲,我们不仅可以将营销数字化,也可以数字化很多事物,甚至行业,比如数字化制造业、数字化工厂、数字化商会等等 而这个…...
实数信号的傅里叶级数研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
oracle数据库巡检脚本
用于Oracle数据库巡检的示例脚本: #!/bin/bash# 设置数据库连接信息 DB_USER="your_db_username" DB_PASSWORD="your_db_password" DB_HOST="your_db_host" DB_PORT="your_db_port" DB_SID="your_db_sid" OUTPUT_FILE=&q…...
服务注册中心consul的服务健康监控及告警
一、背景 consul既可以作为服务注册中心,也可以作为分布式配置中心。当它作为服务注册中心的时候,java微服务之间的调用,会定期查询服务的实例列表,并且实例的状态是健康可用。 如果发现被调用的服务,注册到consul的…...
【算法第十四天7.28】二叉树的最大深度,二叉树的最小深度 ,完全二叉树的节点个数
链接力扣104-二叉树的最大深度 思路 class Solution {public int maxDepth(TreeNode root) {if(root null) return 0;if(root.left null) return maxDepth(root.right) 1;if(root.right null) return maxDepth(root.left) 1;int max Math.max(maxDepth(root.left),maxD…...
网络安全设备-等保一体机
本文为作者学习文章,按作者习惯写成,如有错误或需要追加内容请留言(不喜勿喷) 本文为追加文章,后期慢慢追加 等保一体机的功能 等保一体机产品主要依赖于其丰富的安全网元(安全网元包括:防火…...
Kafka的配置和使用
目录 1.服务器用docker安装kafka 2.springboot集成kafka实现生产者和消费者 1.服务器用docker安装kafka ①、安装docker(docker类似于linux的软件商店,下载所有应用都能从docker去下载) a、自动安装 curl -fsSL https://get.docker.com | b…...
【C++】unordered_map在Windows和Linux上的不同行为
我目前手头上的项目,需要编译在板端Linux上运行,但是日常daily调试多在Windows上开发。这就涉及到同一份代码在多平台上的编译个运行。有一次遇到了一个奇怪的现象:跑同样的一份代码,Windows和Linux出来的结果是不一致的。最终确定…...
Apipost三方消息通知,接口变更不用愁
Apipost致力于为开发者提供更全面的API管理功能。而最近,Apipost又新增了一个非常实用的功能:第三方消息推送。这个功能可以帮助开发人员及时了解API的变更情况,从而更好地管理和优化自己的API。 具体来说,Apipost的第三方消息推…...
C语言 用数组名作函数参数
当用数组名作函数参数时,如果形参数组中各元素的值发生变化,实参数组元素的值随之变化。 1.数组元素做实参的情况: 如果已经定义一个函数,其原型为 void swap(int x,int y);假设函数的作用是将两个形参(x,y…...
每日一题(980. 不同路径 III)-回溯
题目 980. 不同路径 III 题解思路 表格中值为1的为起始点值为0 的是可以经过的点,但是只能经过一次值为2 的是终点,计算从起点到终点一共有多少种路径 计算出值为0的方格个数,同时找到起点位置当位于终点时候且经过所有的方格为0的点 即为…...
【Python:json常用函数,用于加载和保存json文件】load(), loads(), dump(), dumps()
文章目录 1、load()2、loads()3、dump()4、dumps() json文件为javascript object Notation文件,属于轻量级的数据交换格式,可以用于存储和交换数据。json文件是由类似{ }的key-value映射组成。 1、load() 把json文件加载为Python的数据格式,…...
Flink State 和 Fault Tolerance详解
有状态操作或者操作算子在处理DataStream的元素或者事件的时候需要存储计算的中间状态,这就使得状态在整个Flink的精细化计算中有着非常重要的地位: 记录数据从某一个过去时间点到当前时间的状态信息。以每分钟/小时/天汇总事件时,状态将保留…...
小红书2023“家生活”趋势白皮书
关于报告的所有内容,公众【营销人星球】获取下载查看 核心观点 近年来,年轻人与家的关系愈发紧密。 在小红书上,我们观察到了家居家装内容的蓬勃生长,3 年来相关内容的笔记规模增长了6倍,相关品类的搜索量增加的 3.…...
使用 LangChain 搭建基于 Amazon DynamoDB 的大语言模型应用
LangChain 是一个旨在简化使用大型语言模型创建应用程序的框架。作为语言模型集成框架,在这个应用场景中,LangChain 将与 Amazon DynamoDB 紧密结合,构建一个完整的基于大语言模型的聊天应用。 本次活动,我们特意邀请了亚马逊云科…...
210. 课程表 II Python
文章目录 一、题目描述示例 1示例 2示例 3 二、代码三、解题思路 一、题目描述 现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] [ai, bi] ,表示在选修课程 ai 前 必须 …...
【LeetCode 算法】Linked List Cycle II 环形链表 II
文章目录 Linked List Cycle II 环形链表 II问题描述:分析代码哈希快慢指针 Tag Linked List Cycle II 环形链表 II 问题描述: 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链…...
蒸散发与植被总初级生产力估算
目标 熟悉蒸散发ET及其组分(植被蒸腾Ec、土壤蒸发Es、冠层截留Ei)、植被总初级生产力GPP的概念和碳水耦合的基本原理;掌握利用Python与ArcGIS工具进行课程相关的操作;熟练掌握国际上流行的Penman-Monteith模型,并能够…...
uniapp微信小程序底部弹窗自定义组件
基础弹窗效果组件 <template><view><viewclass"tui-actionsheet-class tui-actionsheet":class"[show ? tui-actionsheet-show : ]"><view class"regional-selection">底部弹窗</view></view><!-- 遮罩…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...
