opencv学习(十八)之图像方框滤波BoxBlur

方框滤波(Box filtering) 1.基本原理  与均值滤波不同的是,方框滤波不会计算像素的均值。在均值滤波中,滤波结果的像素值是任意一个点的邻域平均值,等于各邻域像素值之和除以邻域面积。而在方框滤波中,可以自由选择是否对均值滤波的结果进行归一化,即可以自由选择滤波结果是邻域像素值之和的平均值,还是邻域像素值之和。  以 5×5 的邻域为例,在进行方框滤波时,如果计算的是邻域像素值的均值,则滤波关系如图 1-1 所示。如果计算的是邻域像素值之和,则滤波关系如图 1-2 所示。 图1-1  方框滤波关系示例–计算邻域像素值均值 图1-2. 阅读详情

从本篇博客开始了解opencv中imgproc库。imgproc顾名思义就是image process即图像处理,像图像滤波、图像形态学(膨胀腐蚀、开运算、闭运算等)、图像缩放等一些图像处理相关知识。
图像平滑(smoothing)也称为图像模糊(blurring),是一种在图像处理中使用频率很高的操作,进行图像平滑的操作原因有很多,在这里重点介绍使用平滑操作降低图片噪声。因为在图像中,噪声的能量大都集中在幅度谱的低频和中频部分,而在较高的频段,一些重要的细节信息往往被噪声淹没。在一幅图像中,所谓的高频部分是指图像中像素值落差很大的部分,而低频则是指像素值与旁边的像素值相差不大甚至相同,而图像的一些细节的部分往往由高频信息来展现,图像中掺杂的噪声往往也处于高频段,这就造成了一些细节信息被噪声淹没,可以根据不同的噪声类型用不同的滤波器进行处理。
滤波的目的有两个即:1.抽出对象的特征作为图像识别的特征模式;2.为适应图像处理要求,消除数字图像所混入的噪声
对图像滤波有两个要求:1.不能损坏图像的轮廓和边缘等重要信息;2.使图像清晰视觉效果更好

为了进行图像平滑操作,通常在图像上加一个滤波器(filter),最常见的类型是线性的,输出像素值(g(i, j))最终由原像素值和加权值决定。其公式如下:
这里写图片描述

其中h(k, l)被称为核(kernel),是加到图像上滤波器(filter)的系数,它有助于把滤波器进行可视化为一个窗口在图像上滑动,这些设计到邻域的卷积操作。
这里写图片描述

邻域算子值利用给定像素周围像素的值决定此像素的最终输出。左边图像就是原像素的值,中间图像是滤波器(filter),filter的目的就是将滤波器的加权值进行这样的可视化窗口,最右边的图像是原图像和滤波器一起卷积生成,图像中的绿色部分是左图中青色和中间滤波器卷积计算得到的结果。所以可以看出图像像素最终的值不仅与原像素有关也可滤波器选取的kernel窗口大小有关。

方框滤波

在有了上述的理论基础之后,首先介绍一下方框滤波。
这是所有滤波器中最简单的一种滤波方式。每一个输出像素的是内核邻域像素值的平均值得到。
通用的滤波kernel如下:
这里写图片描述

这里是一个长宽分别为Kwidth和Kheight的窗口函数,在此区域内邻域中像素值叠加求平均即可求出位于kernel中心点像素的像素值。opencv中提供了方框滤波函数boxFilter()

C++: void boxFilter(InputArray src, OutputArray dst, int ddepth, Size ksize, Point anchor=Point(-1,-1), bool normalize=true, int borderType=BORDER_DEFAULT )

参数解释:
. InputArray src: 输入图像,可以是Mat类型
. OutputArray dst: 经滤波后输出图像
. int ddepth: 目标图像的深度,若设置为-1,则深度与原图像深度相同
. Size ksize: Size类型,内核的大小,一般用Size(w, h)表示,如Size(3, 3)表示kernel窗口大小为3x3
. Point anchor = Point(-1,-1): 进行滤波操作的点,如果是默认值(-1, -1)说明对上述窗口中心点所对应的像素点进行操作
. bool normalize = true: 内核是否被归一化处理,有默认值true
. int borderType = BORDER_DEFAULT: 用于腿短图像外部像素的某种便捷模式,有默认值BORDER_DEFAULT.
方框滤波用的kernel如下:
这里写图片描述

其中

这里写图片描述

如果计算在kernel窗口中像素综合可以使用integral().

方框滤波示例代码如下:

#include <iostream>
#include <stdio.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace std;
using namespace cv;

const int g_nTrackBarMaxValue = 9;      //轨迹条最大值
int g_nTrackBarValue;                   //轨迹条初始值
Mat g_srcImage, g_dstImage;             //定义图像全局变量
int g_nKernelTrackbarValue;             //定义轨迹条的值

void on_kernelTrackbar(int, void*);

int main()
{
    g_srcImage = imread("lena.jpg");

    //判断图像是否加载成功
    if(g_srcImage.empty())
    {
        cout << "图像加载失败!" << endl;
        return -1;
    }
    else
        cout << "图像加载成功!" << endl << endl;

    namedWindow("原图像",WINDOW_AUTOSIZE);
    imshow("原图像", g_srcImage);            //显示原图像

    g_nTrackBarValue = 1;                   //初始化轨迹条初始值
    namedWindow("方框滤波",WINDOW_AUTOSIZE);      //轨迹条依附窗口
    char kernelName[20];
    sprintf(kernelName, "滤波kernel %d",g_nTrackBarMaxValue);

    //创建轨迹条
    createTrackbar(kernelName, "方框滤波", &g_nTrackBarValue,g_nTrackBarMaxValue,on_kernelTrackbar);
    on_kernelTrackbar(g_nTrackBarValue, 0);

    waitKey(0);

    return 0;
}

void on_kernelTrackbar(int, void*)
{
    //根据输入值重新计算kernel尺寸,见程序详解
    g_nKernelTrackbarValue = g_nTrackBarValue * 2 + 3;

    //方框滤波函数
    boxFilter(g_srcImage, g_dstImage, -1, Size(g_nKernelTrackbarValue, g_nKernelTrackbarValue));
    imshow("方框滤波", g_dstImage);
}

程序分析:
1. 关于轨迹条的创建和使用请参考《opencv(九)之Trackbar滑动条创建和使用》
2. kernel尺寸为3、5、7……这样的奇数,所以根据输入轨迹条的不同的值需要重新计算kernel的尺寸即:

g_nKernelTrackbarValue = g_nTrackBarValue * 2 + 3;

对于语句中最后参数加3是因为轨迹条默认最小值为0,所以在轨迹条在最小值时也可以形成一个3x3大小的kernel滤波器,如果语句改为:

g_nKernelTrackbarValue = g_nTrackBarValue * 2 + 1;

则当轨迹条位于最小值时,图像与原图像一致,无滤波效果

程序运行结果如下:
这里写图片描述

49.图像的方框滤波 然后,定义了一个5x5的滤波核,用于进行方框滤波。接下来,使用boxFilter函数对图像进行方框滤波操作。最后,使用imshow函数显示原始图像和滤波后的图像。方框滤波(Box Filtering)是一种基本的图像平滑滤波方法,它对图像中的每个像素周围的邻域进行求和操作,并取平均值作为该像素的新值。方框滤波的数学原理很简单,它对滤波窗口内的像素值进行求和操作,并取平均值作为输出像素值。在OpenCV中,可以使用boxFilter函数进行方框滤波。减少图像的细节,模糊图像。平滑图像以降低噪声。 阅读详情

相关推荐

OpenCV之图像滤波篇

本文主要介绍opencv中图像前处理工具中的图像滤波处理,详细介绍其原理和功能,并附上相关功能代码

qq_42857680的博客 1190

【opencv学习笔记】009之图像线性滤波原理与操作(方框滤波、均值滤波、高斯滤波)

目录 一、前言 二、图像滤波 1、图像滤波 2、线性滤波器 三、OpenCV中的线型滤波操作 1、方框滤波——boxblur函数 2、均值滤波——blur函数 3、高斯滤波——GaussianBlur函数 一、前言 今天要讲的是图像线性滤波原理与操作,图像滤波包括线性滤波与非线性滤波,今天我们要讲的是线性滤波,包括方框滤波、均值滤波与高斯滤波。 如果想看其他有关于OpenCV...

水亦心的博客 2987

DCDC系列(一): COT DCDC基本原理

电流环DCDC属于双环控制模式,根据电流检测的位置,分为峰值电流环控制模式、谷值电流环控制模式和平均电流环控制模式,主要由输出电压反馈环和电流环两个环路来实现控制,其瞬态响应比电压环更好,且有自动限流的功能,但仍需要斜坡补偿网络,且对噪声敏感。Stage3: 在下管NMOS打开阶段,由于后级负载此时间段内消耗的电量较少,所以VFB还未低至Vref,所以此阶段中,上管PMOS和下管NMOS均处于关断状态,此时的电感电流为0mA,此阶段测的VSW上的电压就是Cout上的电压VREG;

weixin_40073649的博客 3943

OpenCV—图像滤波

OpenCV-图像滤波 1 简介 图像的实质是一种二维信号,滤波是信号处理中的一个重要概念。在图像处理中,滤波是一种非常常见的技术,它们的原理非常简单,但是其思想却十分值得借鉴,滤波是很多图像算法的前置步骤或基础,掌握图像滤波对理解卷积神经网络也有一定帮助。 2 算法理论介绍 2.1 均值滤波、方框滤波 1. 滤波分类 线性滤波: 对邻域中的像素的计算为线性运算时,如利用窗口函数进行平滑加权求和的...

winter980813的博客 514

带隙基准源要点

要点: 负反馈>正反馈;电流镜匹配;双极型晶体管匹配;电阻匹配; 经过R0的电流????????????=????????????????−????????????????????????=∆????????????????????i_R0=(〖VBE〗_1-〖VBE〗_2)/R_0 =∆VBE/R_0 经过R1的电流????????????=i_R1= ????????????????????VBE/R_1 零温电流I = ∆????????????????????∆VBE/R_0 +

HI_WALLE的博客 2266

KV Cache 详解:新手也能理解的 LLM 推理加速技巧

(Autoregressive)生成的,即每次生成一个 token,然后将其作为输入继续生成下一个 token。:如果序列太长,超过了 KV Cache 的存储限制,就需要丢弃最早的 tokens(类似滑动窗口)。时,每次只会生成一个新 token,然后再把这个 token 作为输入继续生成下一个 token。,只缓存计算过的 K,VK, V,每次只计算新 token 的 K,VK, V,从而提升推理效率。:如果输入的 prompt 发生变化,之前的 KV Cache 不能复用,必须重新计算。

Harry的博客 7368

opencv——线性滤波原理及操作(方框滤波、均值滤波、高斯滤波)

目录原理卷积图像模糊原理方框滤波均值滤波(归一化盒子滤波)高斯滤波高斯核(掩膜)高斯滤波计算高斯滤波步骤相关函数方框滤波——boxblur代码效果均值滤波——blur代码效果高斯滤波——GaussianBlur代码效果 原理 Smooth/Blur 是图像处理中最简单和常用的操作之一 使用该操作的原因之一就为了给图像预处理时候减低噪声 使用Smooth/Blur操作其背后是数学的卷积计算 通常这些卷积算子计算都是线性操作,所以又叫线性滤波 卷积 如何理解卷积 假设有6x6的图像像素点

路人coder 2399

AM243x多核MCU启动流程解析与OSPI Flash烧录实战

嵌入式系统开发中,引导加载器是芯片上电后执行的第一段软件,负责初始化硬件、加载操作系统或应用程序。其工作原理通常遵循多级引导链,从ROM固件到用户可定制的二级引导程序,逐级建立完整的软件运行环境。这一机制的技术价值在于实现可靠的系统启动、支持安全校验,并为多核异构架构提供协同基础。在应用场景上,引导加载器广泛应用于工业控制、汽车电子和物联网设备,确保设备能从非易失性存储器中自主启动。本文聚焦于TI AM243x这类高性能多核MCU,深入剖析其包含RBL和SBL在内的三级启动流程,并详细演示如何通过UART接

weixin_28703451的博客 584

超高速BoxBlur算法的实现和优化(Opencv的速度的五倍)

本篇博文来自博主Imageshop,打赏或想要查阅更多内容可以移步至Imageshop。 转载自:https://www.cnblogs.com/Imageshop/p/8302990.html 侵删 在SSE图像算法优化系列五:超高速指数模糊算法的实现和优化(10000*10000在100ms左右实现)一文中,我曾经说过优化后的ExpBlur比BoxBlur还要快,那个时候我比较的BoxBlur算法是通过积分图+SSE实现的,我在09年另外一个博客账号上曾经提供过一篇这个文章彩色图像...

weixin_39450742的博客 899

ICC II 时钟树综合(CTS)前奏:从约束定义到NDR规则的全方位设置指南

本文详细介绍了ICC II中时钟树综合(CTS)的前期准备工作,包括约束定义、NDR规则设置和时钟平衡点控制等关键步骤。通过实际案例和代码示例,指导工程师如何优化时钟偏斜、插入延迟和信号质量,确保芯片设计的时序收敛和性能稳定。特别强调了非默认布线规则(NDR)在时钟网络设计中的重要性。

weixin_42530458的博客 212

海波龙(Hyperion,现属 Oracle)合并报表以 HFM(Hyperion Financial Management)为核心系统,方法论核心是以控制为基础确定合并范围,通过维度建模统一数据口径

摘要:海波龙合并报表系统(HFM)采用"规则驱动、维度建模"的方法论,通过四个核心环节实现自动化合并:确定合并范围、数据标准化、自动抵销调整及报表生成。系统支持多会计准则,以控制为基础划分合并方法(完全合并/权益法/成本法),通过维度建模统一数据口径,自动处理内部交易抵销、外币折算等复杂操作。业务操作流程涵盖数据采集、转换、抵销调整到报表生成全过程,关键控制点包括内部交易匹配、股权变动处理等。最终输出合规合并报表及完整审计线索,满足监管与管理需求。(150字)

金牌架构师 1306

使用opencv实现图像滤波

滤波是信号和图像处理中的基本任务之一,其旨在有选择地提取图像的某些特征,可以用于在给定应用程序的上下文中传达重要信息,例如,去除图像中的噪声、提取所需的视觉特征、图像重采样等。

十年以上架构设计经验,专注于软件架构和人工智能领域,对机器视觉、NLP、音视频等领域都有涉猎 2849

YOLO26跨时代升级!YOLO26 MLCA注意力机制解读

摘要: 本文提出了一种基于多级上下文聚合(MLCA)注意力机制的改进卷积神经网络。MLCA模块通过局部和全局注意力机制动态调整特征图权重,结合了ECA注意力与自适应池化,显著提升特征表达能力。实验表明,添加MLCA后模型mAP提升12.11,准确率提高5.43。文中详细解析了MLCA1模块的工作原理,包括局部/全局池化、卷积操作和注意力加权机制,并介绍了集成MLCA的Bottleneck_MLCA模块。该机制通过多层次特征融合,在保持计算效率的同时增强模型对关键特征的敏感性。最后提供了YOLOv26-MLC

m0_71589036的博客 283

【转载】OpenCV-Python系列之线性滤波(十八)

本次教程将介绍几种OpenCV常用的滤波器,将介绍它们详细的原理,图像滤波对于OpenCV图像处理来说是至关重要的一环,它在整个OpenCV中的分量是举足轻重的,我们必须完完全全的掌握它。 图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。 消除图像中的噪声成分叫作图像的平滑化或滤波操作。信号或图像的能量大部分集中在幅度谱的低频和中频段是很常见的,而在较高频段,感兴趣的信息经常被噪声淹没。因此一个

weixin_44237705的博客 986

CDR插件开发之CPG插件004 - 认识VGCore并编译生成你的第一个CPG文件

上篇文章中,讲到了使用VS2019编译CDR类型库 VGCoreAuto.tlb,编译后得到了vgcoreauto.tlh和vgcoreauto.tli两个文件。本文将对这两个文件说明,并演示通过标准的libid形式来导入CDR类型库,在这个过程中,穿插一些VS2019的使用技巧(删除目录、复制工程、打开项目或解决方案、修改解决方案名称、修改项目名称等),使读者循序渐进,逐步提高对VS2019工具的熟练程度,最后通过修改项目属性配置,生成第一个CPG文件。

Zebe 2985

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Opencv之图像滤波:3.方框滤波(cv2.boxFilter)

OpenCV还提供了方框滤波方式,与均值滤波的不同在于,方框滤波不会计算像素均 值。在均值滤波中,滤波结果的像素值是任意一个点的邻域平均值,等于各邻域像素值之 和除以邻域面积。而在方框滤波中,可以自由选择是否对均值滤波的结果进行归一化,即 可以自由选择滤波结果是邻域像素值之和的平均值,还是邻域像素值之和。 3.1 原理介绍 以5×5的邻域为例,在进行方框滤波时,如果计算的是邻域像素值的均值,则使用的卷积核为: ...

qq_49478668的博客 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

OpenCV(4):图像平滑处理,均值滤波 方框滤波 高斯滤波 中值滤波

今天学习图像的平滑处理。 本文包括:均值滤波 方框滤波 高斯滤波 中值滤波 本次学习用的图像还是前几篇文章一样的图像。如果大家学习的时候没有文件,随便用几张jpg图片都可以学习,代码都是通用的。

m0_50317149的博客 1306

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

数字图像线性滤波——方框、均值、高斯滤波及opencv(C++)实现示例

数字图像线性滤波——方框、均值、高斯滤波及opencv(C++)实现示例

puqian13的博客 2075

图像处理之快速均值模糊(Box Blur)

图像处理之快速均值模糊(Box Blur) 图像模糊的本质, 从数字信号处理的角度看,图像模糊就要压制高频信号保留低频信号, 压制高频的信号的一个可选择的方法就是卷积滤波。选择一个低频滤波器,对图像上的 每个像素实现低频滤波,这样整体效果就是一张数字图像更加的模糊,显示更少的细节信息。 传统的卷积模糊计算量巨大,程序效率比较低,基于滑动窗口的Box Blur是一种快速模糊方法, 其结...

web开发 1031

BoxBlur(方框模糊)

转自:BoxBlur(方框模糊) C++原型: void __stdcall BoxBlur(unsigned char *Src, unsigned char *Dest, int Width, int Height, int Stride, int Radius, int EdgeBehavior) C#声明: [DllImport("ImageProcessing.d

无敌三脚猫的专栏 3694

opencv中常用的线性滤波器--boxFilter(),blur(),GaussianBlur()

1. boxFilter() 下面是opencv官方对boxFilter()函数的介绍。如果均衡化(即normalize==ture,这也是默认值),则其本质是均值滤波。 C++: void boxFilter(InputArray src, OutputArray dst, int ddepth, Size ksize, Point anchor=Point(-1,-1)

生命在于折腾! 2万+

opencv-均值滤波blur解析

滤波器的种类有很多, 在新版本的OpenCV中,提供了如下五种常用的图像平滑处理操作方法,且他们分别被封装在单独的函数中,使用起来非常方便: ·        方框滤波——boxblur函数 ·        均值滤波——blur函数 ·        高斯滤波——GaussianBlur函数 ·        中值滤波——medianBlur函数 ·        双边滤波——bila

春秋战车 1万+

添加椒盐噪声

【代码】添加椒盐噪声。

weixin_42097108的博客 336

OpenCV库中的方框滤波和均值滤波

OpenCV库是一个开源的计算机视觉库,它提供了许多用于图像处理和计算机视觉任务的函数和工具。其中方框滤波和均值滤波都是 OpenCV 中常用的图像滤波方法,用于平滑图像、去除噪声或模糊图像。下面将就利用方框滤波和均值滤波处理图像做详细介绍。首先安装OpenCV库均值滤波是一种线性滤波方法,其原理是对图像中每个像素周围的邻域内的像素值进行求平均。均值滤波的优点在于简单易实现,计算速度快,但它也有明显的缺点,即可能导致图像边缘变得模糊,并且对于一些特定类型的噪声并不十分有效。

2301_77444219的博客 1067

15、方框滤波

一、方框滤波 方框滤波是均值滤波的一般形式,在均值滤波中,将滤波器中所有的像素值求和后的平均值作为滤波后结果,方框滤波也是求滤波器内所有像素值的之和,但是方框滤波可以选择不进行归一化,就是将所有像素值的和作为滤波结果,而不是所有像素值的平均值。 用公式表达为: K=1α[1⋯1⋮⋱⋮1⋯1]K=\frac{1}{\alpha}\left[\begin{array}{ccc}1 & \cdots & 1 \\ \vdots & \ddots & \vdots \\ 1 &amp

MuMengSunny 2383

opencv6.1-imgproc图像处理模块之平滑与形态学操作

这个部分是《opencv-tutorials.pdf》的部分,这部分也是几大部分中例子最多的,其实这个教程的例子都很不错,不过有些看得出来还是c接口的例子,说明例子有些年头了,其实在“opencv/sources/samples”有不同的接口的例子,看完这个教程,下一步就可以看看里面的不同的代码来学习,只是没有说明而已,不过在《opencv-refman.pdf》中会说到某某例子可以参考,...

weixin_34152820的博客 183
上一篇: opencv学习(十七)之XML和YAML文件读写操作
下一篇: U盘无法格式化解决方法
梧桐栖鸦
梧桐栖鸦 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄14年 2268粉丝 98原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值