opencv 31-图像平滑处理-方框滤波cv2.boxFilter()
方框滤波(Box Filtering)是一种简单的图像平滑处理方法,它主要用于去除图像中的噪声和减少细节,同时保持图像的整体亮度分布。
方框滤波的原理很简单:对于图像中的每个像素,将其周围的一个固定大小的邻域内的像素值取平均,然后将这个平均值赋值给当前像素。这个邻域通常是一个正方形,称为方框或窗口。方框滤波相当于用一个均值滤波器对图像进行滤波。
与均值滤波的不同在于,方框滤波不会计算像素均值。
在均值滤波中,滤波结果的像素值是任意一个点的邻域平均值,等于各邻域像素值之和除以邻域面积。
而在方框滤波中,可以自由选择是否对均值滤波的结果进行归一化,即可以自由选择滤波结果是邻域像素值之和的平均值,还是邻域像素值之和。
我们以 5×5 的邻域为例,在进行方框滤波时,如果计算的是邻域像素值的均值,则滤波关系如图 7-15 所示。

仍然以 5×5 的邻域为例,在进行方框滤波时,如果计算的是邻域像素值之和,则滤波关系
如图 7-16 所示。

根据上述关系,如果计算的是邻域像素值的均值,则使用的卷积核为:

如果计算的是邻域像素值之和,则使用的卷积核为:

在 OpenCV 中,实现方框滤波的函数是 cv2.boxFilter(),其语法格式为:
dst = cv2.boxFilter( src, ddepth, ksize, anchor, normalize, borderType
)
式中:
dst 是返回值,表示进行方框滤波后得到的处理结果。
src 是需要处理的图像,即原始图像。它能够有任意数量的通道,并能对各个通道独立处理。图像深度应该是 CV_8U、CV_16U、CV_16S、CV_32F 或者 CV_64F 中的一种。
ddepth 是处理结果图像的图像深度,一般使用-1 表示与原始图像使用相同的图像深度。
ksize 是滤波核的大小。滤波核大小是指在滤波处理过程中所选择的邻域图像的高度和宽度。
例如,滤波核的值可以为(3,3),表示以 3×3 大小的邻域均值作为图像均值滤波处理的结果,如下式所示。

anchor 是锚点,其默认值是(-1, -1),表示当前计算均值的点位于核的中心点位置。
该值使用默认值即可,在特殊情况下可以指定不同的点作为锚点。
normalize 表示在滤波时是否进行归一化(这里指将计算结果规范化为当前像素值范围内的值)处理,该参数是一个逻辑值,可能为真(值为 1)或假(值为 0)。
当参数 normalize=1 时,表示要进行归一化处理,要用邻域像素值的和除以面积。
当参数 normalize=0 时,表示不需要进行归一化处理,直接使用邻域像素值的和。
通常情况下,针对方框滤波,卷积核可以表示为:

上述对应关系为:

例如,针对 5×5 邻域,当参数 normalize=1 时,要进行归一化处理,此时计算的就是均值滤波。
这种情况下,函数 cv2.boxFilter()和函数 cv2.blur()的作用是一样的。
此时,对应的卷积核为:

同样针对 5×5 邻域,当参数 normalize=0 时,不进行归一化处理,此时滤波计算的是邻域像素值之和,使用的卷积核是:

当 normalize=0 时,因为不进行归一化处理,因此滤波得到的值很可能超过当前像素值范围的最大值,从而被截断为最大值。
这样,就会得到一幅纯白色的图像。
borderType 是边界样式,该值决定了以何种方式处理边界。
通常情况下,在使用方框滤波函数时,对于参数 anchor、normalize 和 borderType,直接采
用其默认值即可。因此,函数 cv2.boxFilter()的常用形式为:
dst = cv2.boxFilter( src, ddepth, ksize )
实验1: 针对噪声图像,对其进行方框滤波,显示滤波结果
代码如下:
import cv2
o=cv2.imread("lenaNoise.png")
r=cv2.boxFilter(o,-1,(5,5))
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()
运行结果:
在本例中,方框滤波函数对 normalize 参数使用了默认值。在默认情况下,该值为 1,表示要进行归一化处理。也就是说,本例中使用的是 normalize 为默认值 True 的 cv2.boxFilter()函数,
此时它和函数 cv2.blur()的滤波结果是完全相同的。如图 所示,左图是原始图像,右图是方框滤波结果图像

实验2:针对噪声图像,在方框滤波函数 cv2.boxFilter()内将参数 normalize 的值设置为 0,显示滤波处理结果。
代码如下:
import cv2
o=cv2.imread("lenaNoise.png")
r=cv2.boxFilter(o,-1,(5,5),normalize=0)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()
在本例中,没有对图像进行归一化处理。在进行滤波时,计算的是 5×5 邻域的像素值之和,图像的像素值基本都会超过当前像素值的最大值 255。因此,最后得到的图像接近纯白色,部分点处有颜色。部分点有颜色是因为这些点周边邻域的像素值均较小,邻域像素值在相加后仍然小于 255。
此时的图像滤波结果如图所示,左图是原始图像,右图是方框滤波后得到的处理结果

实验3:针对噪声图像,使用方框滤波函数 cv2.boxFilter()去噪,将参数 normalize 的值设置为 0,将卷积核的大小设置为 2×2,显示滤波结果
代码如下:
import cv2
o=cv2.imread("lenaNoise.png")
r=cv2.boxFilter(o,-1,(2,2),normalize=0)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()
在本例中,卷积核大小为 2×2,参数 normalize=0。因此,本例中方框滤波计算的是 2×2邻域的像素值之和,四个像素值的和不一定大于 255,因此在计算结果图像中有部分像素点不是白色。如图 所示,左图是原始图像,右图是方框滤波处理结果。

相关文章:
opencv 31-图像平滑处理-方框滤波cv2.boxFilter()
方框滤波(Box Filtering)是一种简单的图像平滑处理方法,它主要用于去除图像中的噪声和减少细节,同时保持图像的整体亮度分布。 方框滤波的原理很简单:对于图像中的每个像素,将其周围的一个固定大小的邻域内…...
Kubernetes关于cpu资源分配的设计
kubernetes资源 在K8s中定义Pod中运行容器有两个维度的限制: 资源需求(Requests):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod。如 Pod运行至少需要2G内存,1核CPU。(软限制)资源限额(Limits):即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这…...
Flink读取mysql数据库(java)
代码如下: package com.weilanaoli.ruge.vlink.flink;import com.ververica.cdc.connectors.mysql.source.MySqlSource; import com.ververica.cdc.connectors.mysql.table.StartupOptions; import com.ververica.cdc.debezium.JsonDebeziumDeserializationSchema; import org…...
小程序学习(五):WXSS模板语法
1.什么是WXSS WXSS是一套样式语言,用于美化WXML的组件样式,类似于网页开发中的CSS 2.WXSS和CSS的关系 WXSS模板样式-rpx 3.什么是rpx尺寸单位 4.rpx的实现原理 5.rpx与px之间的单位换算* WXSS模板样式-样式导入 6.什么是样式导入 使用WXSS提供的import语法,可以导入外联的样式…...
注解 @JsonFormat 与 @DateTimeFormat 的使用
文章目录 JsonFormat (双端互传)DateTimeFormat (前端传后端日期格式转化)情况一 前端是时间组件 <el-date-picker 或其他情况二 前端未设置组件 JsonFormat (双端互传) com.fasterxml.jackson.annotation.JsonFormat; 将字符串的时间转换成Date类型…...
Python实现决策树算法:完整源码逐行解析
决策树是一种常用的机器学习算法,它可以用来解决分类和回归问题。决策树的优点是易于理解和解释,可以处理数值和类别数据,可以处理缺失值和异常值,可以进行特征选择和剪枝等操作。决策树的缺点是容易过拟合,对噪声和不…...
Linux文本三剑客---grep、sed、awk
目录标题 1、grep1.1 命令格式1.2命令功能1.3命令参数1.4grep实战演练 2、sed2.1 认识sed2.2命令格式2.3常用选项options2.4地址定界2.5 编辑命令command2.6用法演示2.6.1常用选项options演示2.6.2地址界定演示2.6.3编辑命令command演示 3、awk3.1认识awk3.2常用命令选项3.3awk…...
局域网VoIP网络电话测试
0. 环境 ubuntu18或者ubuntu22 - SIP服务器 win10 - SIP客户端1 ubuntu18 - SIP客户端2 1. SIP服务器搭建asterisk 1.0 环境 虚拟机ubuntu18 或者ubuntu22 1.1 直接安装 sudo apt-get install asterisk 1.2 配置用户信息 分为两个部分,第一部分是修改genera…...
el-table 去掉边框(修改颜色)
原始: 去掉表格的border属性,每一行下面还会有一条线,并且不能再拖拽表头 为了满足在隐藏表格边框的情况下还能拖动表头,修改相关css即可,如下代码 <style lang"less"> .table {//避免单元格之间出现白…...
redis与MongoDB的区别
1.Redis与MongoDB的概念 1.1 MongoDB MongoDB 是由C语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB …...
CSS设置高度
要设置 article.content 的恰当高度,您可以使用 CSS 来控制元素的外观。有几种方法可以设置元素的高度,具体取决于你的需求和布局。 以下是几种常见的方法: 1. 固定高度:你可以直接为 article.content 设置一个固定的高度值&…...
开源免费用|Apache Doris 2.0 推出跨集群数据复制功能
随着企业业务的发展,系统架构趋于复杂、数据规模不断增大,数据分布存储在不同的地域、数据中心或云平台上的现象越发普遍,如何保证数据的可靠性和在线服务的连续性成为人们关注的重点。在此基础上,跨集群复制(Cross-Cl…...
【docker】docker-compose服务编排
目录 一、服务编排概念二、docker compose2.1 定义2.2 使用步骤2.3 docker-compose安装2.4 docker-compose卸载 三、编排示例 一、服务编排概念 1.微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启…...
EdgeBox_tx1_A200 PyTorch v1.9.0 环境部署
大家好,我是虎哥,今天远程帮助几个小伙伴在A200 控制器上安装PyTorch v1.9.0 torchvision v0.10.0,中间也是经历了很多波折,当然,大部分是网络问题和版本适配问题,所以完事后,将自己完整可用的过…...
【雕爷学编程】MicroPython动手做(33)——物联网之天气预报
天气(自然现象) 是指某一个地区距离地表较近的大气层在短时间内的具体状态。而天气现象则是指发生在大气中的各种自然现象,即某瞬时内大气中各种气象要素(如气温、气压、湿度、风、云、雾、雨、闪、雪、霜、雷、雹、霾等ÿ…...
分库分表之基于Shardingjdbc+docker+mysql主从架构实现读写分离 (三)
本篇主要说明: 1. 因为这个mysql版本是8.0,所以当其中一台mysql节点挂掉之后,主从同步,甚至双向数据同步都失效了,所以本篇主要记录下当其中的节点挂掉之后如何再次生效。另外推荐大家使用mysql5.7的版本,这…...
探秘企业DevOps一体化平台建设终极形态丨IDCF
笔者从事为企业提供研发效能改进解决方案相关工作十几年,为国内上百家企业提供过DevOps咨询及解决方案落地解决方案,涉及行业包括:金融、通信、制造、互联网、快销等多种行业。 DevOps的核心是研发效能改进,效能的提升离不开强大…...
百度智能创做AI平台
家人们好,在数字化时代,人工智能正引领着一场前所未有的创新浪潮。今天,我们将为大家介绍百度智能创做AI平台,这个为创意赋能、助力创作者的强大工具。无论你是创意工作者、内容创作者,还是想要释放内心创造力的个人&a…...
Python 开发工具 Pycharm —— 使用技巧Lv.1
Basic code completion Ctrl空格 is available in the search field when you search for text in the current file CtrlF, so there is no need to type the entire string 基本代码完成Ctrl 空格可在搜索领域当你搜索文本在当前文件Ctrl F,所以没有必要整个字符串类型 To m…...
zookeeper --- 高级篇
一、zookeeper 事件监听机制 1.1、watcher概念 zookeeper提供了数据的发布/订阅功能,多个订阅者可同时监听某一特定主题对象,当该主题对象的自身状态发生变化时(例如节点内容改变、节点下的子节点列表改变等),会实时、主动通知所有订阅者 …...
如何零代码构建专业级在线PPT编辑工具:5大核心技术解析
如何零代码构建专业级在线PPT编辑工具:5大核心技术解析 【免费下载链接】PPTist PowerPoint-ist(/pauəpɔintist/), An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing f…...
Go语言秘钥管理:K8s Secret
Go语言秘钥管理:K8s Secret 1. Secret使用 import ("k8s.io/client-go/kubernetes""k8s.io/client-go/rest" )func getSecret(clientset *kubernetes.Clientset, name, namespace string) (string, error) {secret, err : clientset.CoreV1()…...
3步掌握SMUDebugTool:AMD Ryzen处理器调试完全指南
3步掌握SMUDebugTool:AMD Ryzen处理器调试完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitco…...
ROS新手也能玩转AUBO i5:用MoveIt和Rviz在Ubuntu 20.04上实现机械臂可视化仿真与控制
ROS新手也能玩转AUBO i5:用MoveIt和Rviz在Ubuntu 20.04上实现机械臂可视化仿真与控制 机械臂控制一直是机器人开发中的核心课题,而ROS(Robot Operating System)为这一领域提供了强大的工具链。本文将带你从零开始,在Ub…...
AI智能体长期记忆系统:从RAG到Memory-Skill的工程实践
1. 项目概述:一个关于“记忆”的AI技能最近在折腾AI智能体(Agent)和RAG(检索增强生成)相关的东西,发现一个挺有意思的GitHub项目,叫memory-skill。光看名字,你可能会觉得这是个简单的…...
开源硬件性能遥测工具openclaw_telemetry:从数据采集到可视化实战
1. 项目概述:从开源遥测数据中洞察硬件性能在硬件开发和性能调优的领域,数据是驱动决策的基石。我们常常需要实时监控CPU、GPU、内存、温度、功耗等一系列关键指标,以评估系统稳定性、定位性能瓶颈或验证优化效果。然而,构建一套稳…...
原创丨全球主流开源模型及其衍生生态解析
作者:李媛媛 本文约4800字,建议阅读15分钟本文介绍了全球主流开源基座模型及衍生模型的特点、应用与趋势。在人工智能技术产业化落地加速的当下,开源模型已成为推动行业创新的核心力量,其开放、可定制的特性打破了技术壁垒&#x…...
Arm DynamIQ DSU L3缓存电源管理技术解析
1. Arm DynamIQ DSU L3缓存电源管理技术全景解析在现代处理器架构设计中,缓存子系统往往占据芯片总功耗的30%-40%,其中L3共享末级缓存因其大容量特性成为功耗优化的重点对象。Arm DynamIQ™架构创新的DSU(DynamIQ Shared Unit)通过…...
Harness层加密传输:Agent通信安全
Harness层加密传输:Agent通信安全 标题选项 《CI/CD管道的“隐形长城”:深入Harness Agent通信全链路加密传输机制》《从握手到数据:拆解Harness云原生平台Agent-Manager层加密传输的核心原理与实践》《DevOps安全必知:Harness如…...
新时代的信息茧房
大家有没有发现:信息爆炸 2.0 时代,获取真知为何反而更难了? 人类正身处信息传播最为便捷的时代。移动互联网的普及与信息技术的迭代升级,让知识获取变得前所未有的低廉易得。迈入 AI 时代后,这一发展进程更是被推至全…...
