当前位置: 首页 > news >正文

OpenCV(二十二):均值滤波、方框滤波和高斯滤波

目录

1.均值滤波

2.方框滤波

3.高斯滤波


1.均值滤波

       OpenCV中的均值滤波(Mean Filter)是一种简单的滤波技术,用于平滑图像并减少噪声。它的原理非常简单:对于每个像素,将其与其周围邻域内像素的平均值作为新的像素值。

具体的均值滤波原理如下:

  1. 定义滤波器大小:均值滤波器是一个正方形的卷积核,具有固定大小。该大小决定了每个像素使用多少邻域像素进行平均计算。
  2. 遍历图像像素:对于图像中的每个像素,将其与滤波器大小内的邻域像素进行平均计算。
  3. 计算新的像素值:将邻域像素的值相加,然后除以邻域内像素的数量,即可得到新的像素值。
  4. 更新图像:将每个像素的值更新为其对应的新像素值。

均值滤波函数blur()

void cv::blur ( InputArray  src,

OutputArray dst,

Size     ksize,

Point       anchor = Point(-1,-1),

int           borderType = BORDER_DEFAULT

)

  • src:待均值滤波的图像,图像的数据类型必须是CV 8U、CV 16U、CV 16S、CV 32F和CV 64F这五种数据类型之一。
  • dst: 均值滤波后的图像,与输入图像具有相同的尺寸和数据类型。
  • ksize:卷积核尺寸。
  • anchor:内核的基准点(锚点),其默认值为(-l,-1)代表内核基准点位于kernel的中心位置。
  • borderType:像素外推法选择标志。

以下是使用OpenCV进行均值滤波的示例代码:

   //均值滤波blur(image,image,Size(5,5));

在这个示例代码中,我们加载一张图像image,并定义了一个5x5的滤波器大小。然后,我们调用cv::blur函数对图像进行均值滤波。

cv::blur函数将输入图像作为第一个参数,并使用指定的滤波器大小对其进行平滑处理,然后将结果保存在输出图像中。在这个例子中,我们将图像本身作为输出参数,所以原始图像将会被修改。

结论:均值滤波的卷积核越大,图片的失真越明显,图片会更模糊,如果设置核的大小为(1,1),则结果是原始图像。

2.方框滤波

       方框滤波和均值滤波核基本上是一致的,主要的区别是要不要归一化处理,如果使用归一化处理,方框滤波就是均值滤波。

方框滤波函数boxFilter()

void cv::boxFilter ( InputArray   src,

OutputArray dst,

int  ddepth,

Size    ksize,

Point    anchor = Point(-1,-1),

bool      normalize = true,

int         borderType = BORDER_DEFAULT

  • src:输入图像。
  • dst: 输出图像,与输入图像具有相同的尺寸和通道数。
  • ddepth: 输出图像的数据类型(深度),根据输入图像的数据类型不同拥有不同的取值范围。
  • ksize:卷积核尺寸。
  • anchor:内核的基准点(锚点),其默认值为(-1-1)代表内核基准点位于kernel的中心位置。
  • normalize:是否将卷积核进行归一化的标志,默认参数为true,表示进行归一化。
  • borderType:像素外推法选择标志。

示例代码:

     //方框滤波boxFilter()Mat result;boxFilter(image,result,-1,Size(3,3),Point(-1,-1),false);//不进行归一化

3.高斯滤波

        高斯滤波通过使用高斯函数计算像素点的权重,对周围邻域像素进行加权平均,以达到图像平滑的效果。由于高斯函数在中心点附近权重较大,而在离中心点越远的像素权重越小,它能够保留图像的整体结构,并且相对于其他平滑滤波器,它对细节的保留更好。

   高斯函数是一个连续的概率分布函数,它的形状是一个钟形曲线,中心点最高,两边逐渐变低。

高斯滤波的原理如下:

  1. 定义滤波器大小和标准差:在使用高斯滤波之前,需要确定滤波器的大小(窗口大小)和标准差。窗口大小决定了滤波器覆盖的像素范围,标准差决定了高斯函数的形状。

  2. 构建高斯滤波器:根据定义的窗口大小和标准差,构建一个高斯函数或者高斯核矩阵。高斯函数是一个二维正态分布曲线,用于计算滤波器中每个像素的权重。

  3. 遍历图像像素:对于图像中的每个像素,高斯滤波器会考虑其周围邻域像素的值。

  4. 计算加权平均:对于每个像素,在滤波器邻域内,根据高斯函数计算相应像素的权重。权重越大表示该像素对平均值的贡献越大。然后将邻域内像素值与相应权重相乘,得到加权和。

  5. 更新图像:将每个像素的值更新为加权和,得到平滑后的图像。

例如

一个3X3的卷积核是:

计算相应像素的权重

将邻域内像素值与相应权重相乘,得到加权和,将像素的值更新为加权和。

OpenCV中提供了高斯滤波函数cv2.GaussianBlur()来实现高斯滤波。

void cv::GaussianBlur (InputArray  src,

OutputArray dst,

Size   ksize,

double  sigmaX,  

double   sigmaY = 0,

int   borderType = BORDER DEFAULT

)

  • src:待高斯滤波图像,数据类型必须为CV 8U,CV 16U,CV 16S,CV 32F或CV 64F。
  • dst:输出图像,与输入图像src具有相同的尺寸、通道数和数据类型。
  • ksize: 高斯滤波器的尺寸,滤波器可以不为正方形,但是必须是正奇数。如果尺寸为0,则由标准偏差计算尺寸。
  • sigmaX:X方向的高斯滤波器标准偏差。
  • sigmayY:Y方向的高斯滤波器标准偏差: 如果输入量为0,则将其设置为等于sigmax,如果两个轴的标差均为0,则根据输入的高斯滤波器尺寸计算标准偏差。
  • borderType:像素外推法选择标志。

示例代码:

    //调用高斯滤波函数GaussianBlur()进行滤波GaussianBlur(image,image,Size(5,5),10,20);

注意:在高斯滤波当中,核的宽度和高度可以不相同,但都要是奇数。

相关文章:

OpenCV(二十二):均值滤波、方框滤波和高斯滤波

目录 1.均值滤波 2.方框滤波 3.高斯滤波 1.均值滤波 OpenCV中的均值滤波(Mean Filter)是一种简单的滤波技术,用于平滑图像并减少噪声。它的原理非常简单:对于每个像素,将其与其周围邻域内像素的平均值作为新的像素值…...

二叉树的递归遍历和非递归遍历

目录 一.二叉树的递归遍历 1.先序遍历二叉树 2.中序遍历二叉树 3.后序遍历二叉树 二.非递归遍历(栈) 1.先序遍历 2.中序遍历 3.后序遍历 一.二叉树的递归遍历 定义二叉树 #其中TElemType可以是int或者是char,根据要求自定 typedef struct BiNode{TElemType data;stru…...

JDK17:未来已来,你准备好了吗?

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...

K8s和Docker

Kubernetes(简称为K8s)和Docker是两个相关但又不同的技术。 一、Docker 1、Docker是一种容器化平台,用于将应用程序及其依赖项打包成可移植的容器。 2、Docker容器可以在任何支持Docker的操作系统上运行 好处:提供了一种轻量级…...

使用物理机服务器应该注意的事项

使用物理机服务器应该注意的事项 如今云计算的发展已经遍布各大领域,尽管现在的云服务器火遍全网,但是仍有一些大型企业依旧选择使用独立物理服务器,你知道这是为什么吗?壹基比小鑫来告诉你吧。 独立物理服务器托管业务适合大中…...

py脚本解决ArcGIS Server服务内存过大的问题

在一台服务器上,使用ArcGIS Server发布地图服务,但是地图服务较多,在发布之后,服务器的内存持续处在95%上下的高位状态,导致服务器运行状态不稳定,经常需要重新启动。重新启动后重新进入这种内存高位的陷阱…...

Go语言Web开发入门指南

Go语言Web开发入门指南 欢迎来到Go语言的Web开发入门指南。Go语言因其出色的性能和并发支持而成为Web开发的热门选择。在本篇文章中,我们将介绍如何使用Go语言构建简单的Web应用程序,包括路由、模板、数据库连接和静态文件服务。 准备工作 在开始之前…...

保姆级教程——VSCode如何在Mac上配置C++的运行环境

vscode官方下载: 点击官网链接,下载对应的pkg,安装打开; https://code.visualstudio.com/插件安装 点击箭头所指插件商店按钮,yyds; 下载C/C 插件; ![外链图片转存 下载CodeLLDB插件&#x…...

Java 操作FTP服务器进行下载文件

用Java去操作FTP服务器去做下载,本文章里面分为单个下载和批量下载,批量下载只不过多了一层循环,为了方便参考,我代码都贴出来了。 不管单个下载还是多个,一定要记得,远程服务器的直接写文件夹路径&#xf…...

物理机服务器应该注意的事

物理机服务器应该注意的事 1、选址 服务器是个非常重要的硬件产品,对机房的也是有一定的要求的,比如温度、安全性,噪音、电源稳定性等等问题都需要解决!但是不是每个人都会选择自己建立一个机房,毕竟各方面加起来的成本都太高。这…...

信息化发展24

信息技术的发展 1 )在计算机软硬件方面, 计算机硬件技术将向超高速、超小型、平行处理、智能化的方向发展, 计算机硬件设备的体积越来越小、速度越来越高、容量越来越大、功耗越来越低、可靠性越来越高。 2 )计算机软件越来越丰富…...

Qt开发_调用OpenCV(3.4.7)设计完成人脸检测系统

一、前言 近年来,人脸识别技术得到了广泛的应用,它可以在各种场景中实现自动化的人脸检测和识别,例如安防监控、人脸解锁、人脸支付等。 该项目的目标是设计一个简单易用但功能强大的人脸检测系统,可以实时从摄像头采集视频,并对视频中的人脸进行准确的检测和框选。通过…...

Java 中 List 删除元素

fori循环 删除某个元素后,list的大小发生了变化,会导致遍历准确。 这种方式可以用在删除特定的一个元素时使用,但不适合循环删除多个元素时使用 增强for循环 删除元素后继续循环会报错误信息ConcurrentModificationException,但是…...

Redis:StringRedisTemplate简介

(笔记总结自b站黑马程序员课程) 为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入json结果中,存入Redis,会带来额外的内存开销。 为了减少内存的消耗,我们可以采用手动序列化的方式&am…...

pytorch-神经网络-手写数字分类任务

Mnist分类任务: 网络基本构建与训练方法,常用函数解析 torch.nn.functional模块 nn.Module模块 读取Mnist数据集 会自动进行下载 %matplotlib inlinefrom pathlib import Path import requestsDATA_PATH Path("data") PATH DATA_PATH / &…...

【群智能算法改进】一种改进的鹈鹕优化算法 IPOA算法[1]【Matlab代码#57】

文章目录 【获取资源请见文章第5节:资源获取】1. 原始POA算法2. 改进后的IPOA算法2.1 Sine映射种群初始化2.2 融合改进的正余弦策略2.3 Levy飞行策略 3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节:资源获取】 1. 原始POA算法 此…...

C++初阶:C++入门

目录 一.iostream文件 二.命名空间 2.1.命名空间的定义 2.2.命名空间的使用 三.C的输入输出 四.缺省参数 4.1.缺省参数概念 4.2.缺省参数分类 4.3.缺省参数注意事项 4.4.缺省参数用途 五.函数重载 5.1.重载函数概念 5.2.C支持函数重载的原理--名字修饰(name Mangl…...

golang操作数据库--gorm框架、redis

目录 1.数据库相关操作(1)非orm框架①引入②初始化③增删改查 (2) io版orm框架 (推荐用这个)①引入②初始化③增删改查④gorm gen的使用 (3) jinzhu版orm框架①引入②初始化③增删改查 2.redis(1)引入(2)初始化①普通初始化②v8初始化③get/set示例 1.数据库相关操作 (1)非orm…...

10 种常用的字符串方法

10 种常用的字符串方法 1.concat() 字符串拼接 const str1 12345678;const str2 abcdefgh;const str3 -【】;‘;console.log(str1.concat(str2,str3))//12345678abcdefgh-【】;‘ 2.includes() 判断字符串中是否包含指定值,返回布尔值…...

CSDN每日一练 |『生命进化书』『订班服』『c++难题-大数加法』2023-09-06

CSDN每日一练 |『生命进化书』『订班服』『c++难题-大数加法』2023-09-06 一、题目名称:生命进化书二、题目名称:订班服三、题目名称:c++难题-大数加法一、题目名称:生命进化书 时间限制:1000ms内存限制:256M 题目描述: 小A有一本生命进化书,以一个树形结构记载了所有生…...

JavaSec-RCE

简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性&#xff0c…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...