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);

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库基础——数据库、数据表和SQL语句

数据库、数据表和SQL语句 数据库、数据表和SQL语句是什么?数据库安装数据库登录及退出创建、查看数据库及修改名字查看及修改数据库编码删除数据库使用或查看当前正在使用的数据库创建、查看数据表及修改名字查看及修改数据表编码查看及修改数据表结构增加约束删除约…

模型训练:优化人工智能和机器学习,完善DevOps工具的使用

作者:JFrog大中华区总经理董任远 据说法餐的秘诀在于黄油、黄油、更多的黄油。同样,对于DevOps而言,成功的三大秘诀是自动化、自动化、更高程度的自动化,而这一切归根结底都在于构建能够更快速地不断发布新版软件的流程。 尽管人…

【Python程序设计】 工厂模式【07/8】

一、说明 我们探索数据工程中使用的设计模式 - 软件设计中常见问题的可重用解决方案。 以下文章是有关 Python 数据工程系列文章的一部分,旨在帮助数据工程师、数据科学家、数据分析师、机器学习工程师或其他刚接触 Python 的人掌握基础知识。 迄今为止,…

Postman接口测试流程

一、工具安装 ● 安装Postman有中文版和英文版,可以选择自己喜欢的版本即可。安装时重新选择一下安装路径(也可以默认路径),一直下一步安装完成即可。(本文档采用英文版本)安装文件网盘路径链接&#xff1…

【分享】golang windows 运行报错 undefined: syscall.SIGUSR1

在跟着煎鱼大佬学习 Golang-gin的时候,"在优雅的重启服务篇" ,为了gin服务的热更新,采用了 endlessfresh的方案,安装endless后无法在windows本地调试,然后报错。 (优雅的重启服务-地鼠文档优雅的重启服务-我不怎么喜欢左写写&#…

蓝桥杯官网练习题(旋转)

题目描述 图片旋转是对图片最简单的处理方式之一,在本题中,你需要对图片顺时针旋转 90 度。 我们用一个 nm 的二维数组来表示一个图片,例如下面给出一个 34 的 图片的例子: 1 3 5 7 9 8 7 6 3 5 9 7 这个图片顺时针旋转 90 …

蓝桥杯官网填空题(振兴中华)

题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小明参加了学校的趣味运动会,其中的一个项目是:跳格子。 地上画着一些格子,每个格子里写一个字,如下所示&#xff1…

dnmp运行时404报错

dnmp运行时404报错 问题截图: dnmp简介 M1芯片(Arm CPU) 环境中搭建PHPNGINXMYSQL的利器,docker容器管理当前使用的软件,可以简单安装软件和扩展。 localhost.conf 原始文件如下: server {listen 8…

springmvc 获取项目中的所有请求路径

springboot/springmvc 获取项目中的所有请求路径 1. 编写业务代码 Autowiredprivate WebApplicationContext applicationContext;GetMapping("/getAllURL")public RestfulResult getAllURL() {// 获取springmvc处理器映射器组件对象 RequestMappingHandlerMapping无…

海康NVR(Network Video Recorder)启用SSH过程摸索

文章目录 海康NVR具备的特点启用SSH模式优劣比较启用SSH模式的优势启用SSH模式的坏处 Hik NVR启用SSH功能1,Web登录NVR2,SSH登录NVR SSH shell模式特点SSH shell模式指令作用1,简要帮助“help”可以列出常用的shell指令部分可用shell指令输出…

Android Handler 机制解析

1、前言 在 Android 开发中,Handler 的机制和运行原理这方面的知识可以说是每个人都需要熟悉的。这不仅是因为 Handler 是 Android 应用的基石之一,也因为 Handler 整体设计上也是十分优秀的。接下来我就梳理总结一下常见的 Handler 相关知识点。 2、基…

修复 ChatGPT 发生错误的问题

目录 ChatGPT 发生错误?请参阅如何修复连接错误! 修复 ChatGPT 发生错误的问题 基本故障排除技巧 检查 ChatGPT 的服务器状态 检查 API 限制 检查输入格式 清除浏览数据 香港DSE是什么? 台湾指考是什么? 王湘浩 生平 …

【漏洞复现】EnjoySCM存在文件上传漏洞

漏洞描述 EnjoySCM是一款适应于零售企业的供应链管理软件,主要为零售企业的供应商提供服务。EnjoySCM的目的是通过信息技术,实现供应商和零售企业的快速、高效、准确的信息沟通、管理信息交流。。 该系统存在任意文件上传漏洞,攻击者通过漏洞可以获取服务器的敏感信息。 …

【C#项目实战】控制台游戏勇士斗恶龙(1)——游戏初始设置以及开始界面

君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,最近开始正式的步入学习游戏开发的正轨,想要通过写博客的方式来分享自己学到的知识和经验,这就是开设本专栏的目的。希望…

植物大战僵尸各种僵尸攻略

前言 此文章为“植物大战僵尸”专栏中的009刊(2023年9月第八刊),欢迎订阅。版权所有。 注意: 1.本博客适用于pvz无名版; 2.pvz指植物大战僵尸(Plants VS Zonbies); 3.本文以耗费低做标准&am…

老太太阿姨收割机秀才被封

除了他自己和平台官方,恐怕没有人知道详细数字,不过坊间流传着一句话,叫“秀才和一笑倾城一场直播,就可以榨光一个省的老人低保 可见吸金是有多么恐怖 一笑倾城是秀才的“姊妹篇”,秀才专供老太太,一笑倾城…

uni-app:自带的消息提示被遮挡的解决办法(自定义消息提示框)

效果&#xff1a; 代码&#xff1a; 1、在最外层或者根组件的模板中添加一个容器元素&#xff0c;用于显示提示消息。例如&#xff1a; <div class"toast-container" v-if"toastMessage"><div class"toast-content">{{ toastMessa…

EMERSON A6500-CC 机架接口模块 AMS参数

EMERSON A6500-CC 机架接口模块 AMS参数 ModBus和机架接口模块设计用于工厂的高可靠性 最关键的旋转机械。它从所有AMS A6500 ATG模块读取参数 并通过ModBus TCP/IP和/或ModBus RTU&#xff08;串行&#xff09;输出这些参数。 此外&#xff0c;OPC UA可用于向第三方系统传输数…

华为Mate 60和iPhone 15选哪个?

最近也有很多朋友问我这个问题来着&#xff0c;首先两款手机定位都是高端机&#xff0c;性能和体验各有千秋&#xff0c;各自有自己的铁杆粉。 但是让人意想不到的是华为mate60近日在海外越来越受欢迎和追捧&#xff0c;甚至是引起了不少人的抢购&#xff0c;外观设计和…

最详细的CompletableFuture异步编程-进阶篇

1、异步任务的交互 异步任务交互指 将异步任务获取结果的速度相比较&#xff0c;按一定的规则( 先到先用 )进行下一步处理。 1.1 applyToEither applyToEither() 把两个异步任务做比较&#xff0c;异步任务先到结果的&#xff0c;就对先到的结果进行下一步的操作。 Complet…