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

OpenCV——均值滤波

目录

  • 一、均值滤波
    • 1、核心定义
    • 2、计算公式
    • 3、算法优缺点
    • 4、函数详解
  • 二、C++代码
  • 三、python代码
  • 四、结果展示
    • 1、原始图像
    • 2、3x3卷积
    • 3、9x9卷积

一、均值滤波

1、核心定义

均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即包括目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。
均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点( x , y ) (x,y)xy,选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点( x , y ) (x,y)xy,作为处理后图像在该点上的灰度g ( x , y ) g(x,y)gxy,即g ( x , y ) = ∑ f ( x , y ) / m g(x,y)=∑f(x,y)/mgxy=fxy/mm mm为该模板中包含当前像素在内的像素总个数。
均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。
常规滤波模板:常用奇数尺寸卷积核(3×3、5×5、9×9),保证像素中心点唯一,3×3模板默认包含中心像素+周边8邻域像素,共计9个像素参与均值计算。

2、计算公式

设原始图像像素灰度值为f ( x , y ) f(x,y)f(x,y),滤波后图像像素灰度值为g ( x , y ) g(x,y)g(x,y),滤波模板内总像素数量为m mm,公式如下:
g ( x , y ) = 1 m ∑ f ( x , y ) g(x,y)=\frac{1}{m}\sum f(x,y)g(x,y)=m1f(x,y)
举例:3×3卷积核m = 9 m=9m=9,取邻域9个像素求和后除以9,赋值给中心像素;卷积核尺寸越大,参与均值计算像素越多,图像平滑效果越强。

3、算法优缺点

✅ 优点

  • 算法逻辑简单、计算速度快、硬件算力开销低,实时性较好
  • 对均匀分布高斯噪声、轻度椒盐噪声降噪效果直观,适配预处理场景
  • OpenCV内置封装函数,无需手动编写遍历卷积逻辑,调用极简

❌ 固有缺陷

  • 全局均等加权:模板内所有像素权重一致,降噪无区分度,极易破坏图像边缘、纹理、细节特征
  • 卷积核尺寸越大,图像模糊程度越高,细节丢失越严重
  • 对重度椒盐噪声降噪能力差,无法针对性保留有效像素、剔除噪点像素

4、函数详解

通用API:

blur(src,dst,ksize,anchor,borderType)
  1. src:输入原始图像,支持灰度图、彩色三通道BGR图像
  2. dst:输出滤波后图像,尺寸、通道数与原图完全一致
  3. ksize:卷积核尺寸 Size(w,h),建议取奇数长宽(3/5/9),偶数核会出现像素偏移
  4. anchor:锚点,默认(-1,-1),代表卷积核中心点
  5. borderType:图像边缘填充方式,默认自动填充,无需手动修改

二、C++代码

#include<opencv2\opencv.hpp>#include<iostream>usingnamespacecv;usingnamespacestd;intmain(){Mat img=imread("hx.jpg");if(img.empty()){cout<<"请确认图像文件名称是否正确"<<endl;return-1;}Mat result_3,result_9;//存放滤波结果,数字代表滤波器尺寸//调用均值滤波函数blur()进行滤波blur(img,result_3,Size(3,3));// 3x3卷积核blur(img,result_9,Size(9,9));// 9x9卷积核//显示处理结果imshow("origion pic ",img);imshow("3x3 result",result_3);imshow("9x9 salt",result_9);waitKey(0);return0;}

三、python代码

importcv2# 读取同级目录加盐噪声图像img=cv2.imread('hx.jpg')# 图像读取异常判断ifimgisNone:print("图像读取失败,请检查图片路径与文件名!")exit()# -------------------均值滤波核心代码------------------# 3×3卷积核滤波:轻度平滑降噪img_mean_3=cv2.blur(img,(3,3))# 9×9卷积核滤波:高强度平滑降噪img_mean_9=cv2.blur(img,(9,9))# ------------------可视化结果(已修复原版赋值bug)-----------------cv2.imshow('原始噪声图像',img)cv2.imshow('3x3卷积滤波结果',img_mean_3)cv2.imshow('9x9卷积滤波去噪结果',img_mean_9)# 按键等待+资源释放cv2.waitKey(0)cv2.destroyAllWindows()

四、结果展示

1、原始图像

2、3x3卷积

3、9x9卷积

http://www.jsqmd.com/news/1083641/

相关文章:

  • 微软CEO:别只顾接入AI,你的知识正在被大模型吸走
  • 技术栈类型
  • 渗透测试升维实践:从漏洞挖掘到安全体系赋能
  • DLSS Swapper:3步搞定游戏DLSS版本管理,告别手动替换烦恼
  • STM32+4G+Lora物联网氨气监测方案详解
  • IPXWrapper终极指南:3分钟让Windows 11也能畅玩经典IPX游戏
  • 深圳中南实验室建设|实验室设计公司厂商:蓝图到交付一站式方案
  • Parsec VDD:快速创建4K虚拟显示器的完整指南
  • 2026年,探秘专业高压塑料膜生产商的制胜秘诀
  • 5分钟掌握Zotero中文文献管理:茉莉花插件完全指南
  • ColorControl终极指南:如何用免费开源工具一键管理所有显示设备
  • 如何零成本解锁Grammarly Premium高级功能:终极免费使用指南
  • 工业级差分晶振选型与应用全解析
  • 一支能打硬仗的队伍,长沙迪迈科技的组织凝聚力从何而来
  • Java毕设选题推荐:基于微服务 SpringBoot 的社区智能健康监护系统的设计与实现 基于 SpringBoot+Vue 的智慧社区健康管【附源码、mysql、文档、调试+代码讲解+全bao等】
  • PS 怎么制作立体字效果?3 种零基础图文实操完整教程
  • Java IDE迁移决策白皮书(IntelliJ IDEA与MyEclipse深度横评):基于37个真实团队、892小时IDE使用日志与217份开发者问卷的权威结论
  • 2026深度实测:5款AI编程助手真实体验对比
  • Codex可以批量生成图片提示词吗?Claude润色后做电商主图流程
  • Hermes Agent实战指南:基于LangGraph的可控智能体工作流搭建
  • 终极实战指南:如何用dnSpyEx进行专业级.NET程序集分析与逆向工程
  • ColorControl完整指南:如何一键管理多设备显示设置,彻底告别繁琐手动调整
  • Python自动化测试实战:从环境搭建到框架设计与持续集成
  • 三菱 FX 系列 PLC学习程序分享- 5 层电梯完整 PLC 项目程序
  • Beyond Compare 5 注册密钥生成工具完全指南:从技术原理到实战应用
  • Pytest Fixture 实战指南:从依赖注入到自动化测试预置条件设计
  • 2026年论文写作AI工具怎么用?豆包等工具详细使用教程
  • ESP32同步整流MPPT降压系统设计与效率优化
  • 互联网大厂 Java 求职面试:从音视频场景看 Java 技术栈
  • 终极指南:5分钟用Balena Etcher安全烧录任何系统镜像