图像平滑处理

图像平滑处理

  • 四种常用方式
    • 1. 均值滤波 (cv2.blur())
    • 2. 高斯滤波 (cv2.GaussianBlur())
    • 3. 中值滤波 (cv2.medianBlur())
    • 4、双边滤波 (cv2.bilateralFilter())
  • 总结
  • 存图时遇到一个中文版乱码问题


四种常用方式

平滑处理(也称为模糊处理),用于减少图像中的噪声或细节。

OpenCV 提供了多种平滑处理的方法,这里展示四种常用的平滑处理技术:均值滤波、高斯滤波、中值滤波和双边滤波。

1. 均值滤波 (cv2.blur())

均值滤波是最简单的平滑处理方法之一。

均值滤波的原理是将图像中每个像素的值替换为其周围像素的平均值。

均值滤波可以有效地去除噪声,但可能会导致图像变得模糊。

	# 读取图片img = cv2.imread('D:\Word\keli.jpg')# 应用均值滤波blurred_image = cv2.blur(img, (5, 5))# 保存图片cv2.imwrite('D:\Word\keli_blurred.jpg', blurred_image)# 显示结果cv2.imshow('blurred_image', blurred_image)cv2.waitKey(0)cv2.destroyAllWindows()

在这里插入图片描述

在这里插入图片描述

2. 高斯滤波 (cv2.GaussianBlur())

高斯滤波是一种基于高斯函数的平滑处理方法。与均值滤波不同,高斯滤波在计算像素平均值时,会给中心像素赋予更高的权重,而给边缘像素赋予较低的权重。

高斯滤波在去除噪声的同时,能够更好地保留图像的边缘信息。

# 读取图片img = cv2.imread('D:\Word\keli_thres2.jpg')# 应用高斯滤波blurred_image = cv2.GaussianBlur(img, (5, 5), 0)# 保存图片cv2.imwrite('D:\Word\keli_blurred.jpg', blurred_image)# 显示结果cv2.imshow('blurred_image', blurred_image)cv2.waitKey(0)cv2.destroyAllWindows()

cv2.GaussianBlur(image, (5, 5), 0) 参数说明
image: 输入的图像。
(5, 5): 滤波核的大小。
0: 高斯核的标准差,如果为0,则根据核大小自动计算。

在这里插入图片描述
在这里插入图片描述

适用场景
高斯滤波适用于去除图像中的高斯噪声,并且在保留图像边缘信息方面表现较好。

3. 中值滤波 (cv2.medianBlur())

中值滤波是一种非线性平滑处理方法。它的原理是将图像中每个像素的值替换为其周围像素的中值。

中值滤波在去除椒盐噪声(即图像中随机出现的黑白点)时非常有效。

	# 读取图片img = cv2.imread('D:\Word\keli_thres2.jpg')# 应用中值滤波blurred_image = cv2.medianBlur(img, 5)# 保存图片cv2.imwrite('D:\Word\keli_blurred.jpg', blurred_image)# 显示结果cv2.imshow('blurred_image', blurred_image)cv2.waitKey(0)cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

参数说明

image: 输入的图像。
5: 滤波核的大小,必须是奇数。

适用场景
中值滤波适用于去除图像中的椒盐噪声,并且在保留图像边缘信息方面表现较好。

4、双边滤波 (cv2.bilateralFilter())

双边滤波是一种非线性的平滑处理方法,它结合了空间邻近度和像素值相似度。

与高斯滤波不同,双边滤波在平滑图像的同时,能够保留图像的边缘信息。这是因为双边滤波不仅考虑像素之间的空间距离,还考虑像素值之间的差异。

# 读取图片img = cv2.imread('D:\Word\keli.jpg')# 应用双边滤波blurred_image = cv2.bilateralFilter(img, 11, 17, 17)# 保存图片cv2.imwrite('D:\Word\keli_blurred.jpg', blurred_image)# 显示结果cv2.imshow('blurred_image', blurred_image)cv2.waitKey(0)cv2.destroyAllWindows()

在这里插入图片描述

在这里插入图片描述

cv2.bilateralFilter(image, 9, 75, 75)
参数说明

image: 输入的图像。
9: 滤波核的大小。
75: 颜色空间的标准差,控制像素值相似度的权重。
75:坐标空间的标准差,控制空间距离的权重。

适用场景
双边滤波适用于在去除噪声的同时保留图像的边缘信息,常用于图像美化或预处理。

总结

OpenCV 提供了多种图像平滑处理方法,每种方法都有其独特的优势和适用场景。
均值滤波简单易用,但可能导致图像模糊;
高斯滤波在去除噪声的同时能较好地保留边缘信息;
中值滤波特别适合去除椒盐噪声;
双边滤波则在保留边缘信息方面表现出色。
根据具体的应用场景,选择合适的平滑处理方法,可以显著提升图像处理的效果。

存图时遇到一个中文版乱码问题

当使用cv2.imwrite保存带有中文路径或名称的图片时,可能会出现乱码问题。这是因为cv2.imwrite在处理非ASCII字符时存在限制

# 保存图片cv2.imwrite(r'D:\Word\keli_均值滤波.jpg', blurred_image1)cv2.imwrite(r'D:\Word\keli_高斯滤波.jpg', blurred_image2)cv2.imwrite(r'D:\Word\keli_中值滤波.jpg', blurred_image3)cv2.imwrite(r'D:\Word\keli_双边滤波.jpg', blurred_image4)# 使用cv2.imencode和tofile保存图片,避免中文路径乱码cv2.imencode('.jpg', blurred_image1)[1].tofile('D:\Word\keli_均值滤波.jpg')cv2.imencode('.jpg', blurred_image2)[1].tofile('D:\Word\keli_高斯滤波.jpg')cv2.imencode('.jpg', blurred_image3)[1].tofile('D:\Word\keli_中值滤波.jpg')cv2.imencode('.jpg', blurred_image4)[1].tofile('D:\Word\keli_双边滤波.jpg')

第一种会中文乱码,第二种就不会

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

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

相关文章

fortigate的waf功能

在系统管理----可见功能----web应用防火墙打开waf功能Web 应用程序防火墙 (WAF) 配置文件可以检测和阻止已知的 Web 应用程序攻击。您可以将 WAF 配置文件配置为使用签名和约束来检查 Web 流量。您还可以强制实施 HTTP 方法策略,该策略控制与…

AI Compass前沿速览:可灵创意工坊、字节Coze StudioCoze Loop、通义万相2.2 、智谱GLM-4.5、腾讯混元3D世界模型开源

AI Compass前沿速览:可灵创意工坊、字节Coze Studio&Coze Loop、通义万相2.2 、智谱GLM-4.5、腾讯混元3D世界模型开源 AI-Compass 致力于构建最全面、最实用、最前沿的AI技术学习和实践生态,通过六大核心模块的系统化组织,为不同层次的学…

SpringCloud之Gateway

SpringCloud之Gateway 官网地址: https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories 1. 什么是gateway Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架,定位于取代 Net…

关于获取某目录及子目录下所有文件且不包含隐藏文件

最近比较忙,很少写blog了!!!关于获取目录及子目录下所有文件是常遇到的功能,一般通过递归遍历实现。而生产场景中,一般是遍历nas上的目录,在nas上利用File.listFiles(),在linux系统上无法获取含…

docker可视化管理工具lazydocker

Lazydocker 是一个用 Go 语言编写的命令行 Docker 管理工具。它提供了一个简洁、直观的终端界面,支持键盘和鼠标操作,可通过方向键与快捷键实时查看和管理容器、镜像、网络等资源,大幅简化了原本复杂的命令行操作,提升操作效率。2…

少林寺用什么数据库?

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,15年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝15万 擅长主流Oracle、MySQL、PG、高斯及…

C语言---万能指针(void *)、查找子串(strncmp函数的应用)多维数组(一维数组指针、二维数组指针)、返回指针值函数、关键字(const)

一、字符串与指针用字符指针指向一个字符串,可以不定义字符数组,而定义字符指针。用字符指针指向字符串中的字符。不能使用指针去改变不能修改的空间。eg1. 运用指针将 src 的内容拷贝到 dest 中去void Strcpy(char *dest, char *src) {while(*src ! \0)…

Keepalived 实战

一、高可用集群基础核心概念与指标集群类型:LB(负载均衡):如 LVS、HAProxy、Nginx,提升吞吐量;HA(高可用):保障核心服务(数据库、Redis)连续性&am…

窗口函数替代子查询的复杂查询简化技巧

窗口函数通过单次扫描完成分析计算,能大幅简化子查询结构并提升性能,尤其在排名、累计计算等场景‌15。以下是核心优化技巧:一、排名场景替代方案‌部门工资排名‌传统子查询需自连接和聚合计数:sqlSELECT e1.name, e1.salary, (S…

深度学习:预训练和warm up的区别

“预训练(Pre-training)”和“Warm-up(预热)”是深度学习中常见的两个训练策略,它们虽然都在训练初期起作用,但本质和目的完全不同。一、预训练(Pre-training)1. 定义预训练是指&…

Apache Ignite中分布式信号量(Distributed Semaphore)的说明和使用示例

这段内容是关于 Apache Ignite 中 分布式信号量(Distributed Semaphore) 的说明和使用示例。我们来一步步解析,帮助你深入理解它的含义和用途。🔹 一、什么是 Semaphore(信号量)? 在并发编程中&…

怎么提升服务器的防攻击能力!

提升服务器的防攻击能力需要从​​架构设计、技术防护、运维管理​​等多维度入手,覆盖网络层、系统层、应用层及数据层的安全防护。以下是具体的策略和实践方法:​​一、基础安全加固:消除自身漏洞​​服务器自身的脆弱性是最常见的攻击入口…

vscode配置rust环境

1.官网下载vscode,安装 2.vscode命令行运行: Invoke-WebRequest https://win.rustup.rs/x86_64 -OutFile rustup-init.exe然后: .\rustup-init.exe3.验证 先配置path: $env:Path ";$env:USERPROFILE\.cargo\bin"查看是…

最新版 HarmonyOS NEXT 开发工具安装教程:如何在 macOS 系统安装 DevEco Studio 5.0.3 编辑器?

最新版 HarmonyOS NEXT 开发工具安装教程:如何在 macOS 系统安装 DevEco Studio 5.0.3 编辑器? 什么是 DevEco Studio? DevEco Studio 是华为为 HarmonyOS 开发的强大集成开发环境(IDE),专为开发 Harmony…

电商项目统一认证方案设计与实战

1. 微服务网关整合 OAuth2.0 设计思路分析 网关整合 OAuth2.0 有两种思路,一种是授权服务器生成令牌, 所有请求统一 在网关层验证,判断权限等操作;另一种是由各资源服务处理,网关只做请求 转发 。 比较常用的是第一种&#xf…

学习Markdown

标题一 标题二 标题三 标题四 标题五 标题六这是一段引用文本直接编写,段落换行是末尾两个以上的空格+回车 或者在段落后加一个空行 粗体语法:使用两个星号 ** 或两个下划线 __ 包围文字:这是粗体文字使用星号 这是__粗体文字__使…

剧本杀系统 App 开发:科技赋能,重塑剧本杀游戏体验

在科技飞速发展的当下,各个行业都在积极寻求与科技的融合,以实现创新和升级。剧本杀行业也不例外,剧本杀系统 App 的开发正是科技赋能的生动体现,它重塑了传统的剧本杀游戏体验,为玩家带来了全新的感受。剧本杀系统 Ap…

wvp-gb28181-pro 只用jar运行

编译前端后npm install --global yarnyarn --registryhttps://registry.npmjs.org installyarn run build,生成的前端文件,会在wvp-GB28181-pro\src\main\resources\static,因为是在resources中,打maven打包后会一起打到jar中&…

深度学习(鱼书)day06--神经网络的学习(后两节)

深度学习(鱼书)day06–神经网络的学习(后两节)一、梯度 像 这样的由全部变量的偏导数汇总而成的向量称为梯度(gradient)。 梯度实现的代码: def numerical_gradient(f, x):h 1e-4 # 0.0001grad…

学习嵌入式的第三十四天-数据结构-(2025.7.29)数据库

数据库基础概念 数据库是用于存储和管理海量数据的应用程序,提供数据增删改查及统计功能(如最大值、最小值、平均数等)。通过SQL语句操作数据,以表格形式管理存储。 数据库分类 关系型数据库 Oracle(大型&#xff0…