Python数字图像处理实战——基于OpenCV实现多种滤波器(附完整代码和结果图)

Python数字图像处理实战——基于OpenCV实现多种滤波器(附完整代码和结果图)


关于作者


作者:小白熊

作者简介:精通python、matlab、c#语言,擅长机器学习,深度学习,机器视觉,目标检测,图像分类,姿态识别,语义分割,路径规划,智能优化算法,数据分析,各类创新融合等等。

联系邮箱:xbx3144@163.com

科研辅导、知识付费答疑、个性化定制以及其他合作需求请联系作者~



1 前言

  图像处理是计算机视觉中非常重要的一部分,而滤波器是用于增强图像、减少噪声、检测边缘等的核心工具。通过不同的滤波器,我们可以处理图像中的噪声、模糊和细节,从而让图像在后续的处理步骤中更加清晰和准确。在本文中,我们将基于OpenCV展示如何实现多种常见的滤波操作,包括:

  1. 均值滤波
  2. 高斯滤波
  3. 中值滤波
  4. 双边滤波
  5. 自适应滤波
  6. Sobel 边缘检测
  7. Scharr 滤波



2 代码实现

2.1 导入所需库

首先我们导入一些常用的库,如 OpenCV 用于图像处理,Matplotlib 用于结果可视化。

import cv2
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")# 配置Matplotlib显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

2.2 均值滤波

  均值滤波是一种简单的平滑滤波,它通过取周围像素的平均值来减小图像中的噪声。均值滤波的效果较为温和,适合用于去除随机噪声。

mean_filter = cv2.blur(img, (5, 5))

2.3 高斯滤波

  高斯滤波是一种常用的平滑滤波器,它使用高斯函数对邻域内的像素进行加权平均,能够较好地去除图像中的高斯噪声,同时保持图像边缘的细节。

gaussian_filter = cv2.GaussianBlur(img, (5, 5), 0)

2.4 中值滤波

  中值滤波是非线性滤波的一种,特别适用于去除椒盐噪声。它通过选取邻域中的中值代替中心像素,能够在保留边缘的同时去除噪声。

median_filter = cv2.medianBlur(img, 5)

2.5 双边滤波

  双边滤波在去除噪声的同时能够很好地保留边缘细节。它根据像素间的空间距离和颜色差异进行加权平均,是一种非常适合图像增强的滤波方法。

bilateral_filter = cv2.bilateralFilter(img, 9, 75, 75)

2.6 自适应滤波

自适应滤波是一种根据图像局部特征动态调整滤波方式的滤波器。在本例中,我们使用自适应阈值滤波对图像进行二值化处理,适合处理光照不均匀的图像。

adaptive_filter = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

2.7 Sobel 边缘检测滤波

  Sobel 滤波是经典的边缘检测方法,通过计算图像的梯度来提取边缘信息。Sobel 滤波器可以分别检测水平和垂直方向的边缘,最终将它们结合,得到完整的边缘图。

sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5)
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5)
sobel_filter = np.hypot(sobelx, sobely)

2.8 Scharr 滤波

  Scharr 滤波是一种增强版的Sobel滤波器,在边缘检测时有更高的精度和更好的效果,尤其是在检测细微的边缘时表现更出色。

scharrx = cv2.Scharr(img, cv2.CV_64F, 1, 0)
scharry = cv2.Scharr(img, cv2.CV_64F, 0, 1)
scharr_filter = np.hypot(scharrx, scharry)


3 完整代码

import cv2
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import wiener
from skimage import restoration
import warnings
warnings.filterwarnings("ignore")plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 读取原始图像
img = cv2.imread('messi.jpg', cv2.IMREAD_GRAYSCALE)# 均值滤波
mean_filter = cv2.blur(img, (5, 5))# 高斯滤波
gaussian_filter = cv2.GaussianBlur(img, (5, 5), 0)# 中值滤波
median_filter = cv2.medianBlur(img, 5)# 双边滤波
bilateral_filter = cv2.bilateralFilter(img, 9, 75, 75)# 自适应滤波(自适应阈值滤波)
adaptive_filter = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)# Sobel 边缘检测滤波
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5)
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5)
sobel_filter = np.hypot(sobelx, sobely)  # 计算梯度幅度# Scharr 滤波
scharrx = cv2.Scharr(img, cv2.CV_64F, 1, 0)
scharry = cv2.Scharr(img, cv2.CV_64F, 0, 1)
scharr_filter = np.hypot(scharrx, scharry)# 创建子图来显示结果
plt.figure(figsize=(15, 15))# 显示原始图像
plt.subplot(3, 3, 1)
plt.imshow(img, cmap='gray')
plt.title('原始图片')
plt.axis('off')# 均值滤波
plt.subplot(3, 3, 2)
plt.imshow(mean_filter, cmap='gray')
plt.title('均值滤波')
plt.axis('off')# 高斯滤波
plt.subplot(3, 3, 3)
plt.imshow(gaussian_filter, cmap='gray')
plt.title('高斯滤波')
plt.axis('off')# 中值滤波
plt.subplot(3, 3, 4)
plt.imshow(median_filter, cmap='gray')
plt.title('中值滤波')
plt.axis('off')# 双边滤波
plt.subplot(3, 3, 5)
plt.imshow(bilateral_filter, cmap='gray')
plt.title('双边滤波')
plt.axis('off')# 自适应滤波
plt.subplot(3, 3, 6)
plt.imshow(adaptive_filter, cmap='gray')
plt.title('自适应滤波')
plt.axis('off')# Sobel 滤波
plt.subplot(3, 3, 7)
plt.imshow(sobel_filter, cmap='gray')
plt.title('Sobel 滤波')
plt.axis('off')# Scharr 滤波
plt.subplot(3, 3, 8)
plt.imshow(scharr_filter, cmap='gray')
plt.title('Scharr 滤波')
plt.axis('off')plt.tight_layout()
# 保存图像
plt.savefig('results.png')# 显示结果
plt.show()



结果图:

结果



4 滤波器的选择

  • 均值滤波:适合处理细微噪声,但可能模糊图像边缘。
  • 高斯滤波:适合去除高斯噪声,具有更好的边缘保留能力。
  • 中值滤波:适合去除椒盐噪声,保留边缘细节。
  • 双边滤波:在平滑图像的同时保留边缘,是图像增强的理想选择。
  • 自适应滤波:在光照变化较大的情况下,可以动态调整阈值处理图像。
  • Sobel 和 Scharr 滤波:用于边缘检测,后者精度更高,适合处理细微的边缘。



5 总结

  本文演示了几种常见滤波器的使用方法及其处理效果。每种滤波器都有各自的优势和适用场景,在实际应用中,选择合适的滤波器能够有效提高图像处理的效果。



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

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

相关文章

极客兔兔Gee-Cache Day7

protobuf配置: 从 Protobuf Releases 下载最先版本的发布包安装。解压后将解压路径下的 bin 目录 加入到环境变量即可。 如果能正常显示版本,则表示安装成功。 $ protoc --version libprotoc 3.11.2在Golang中使用protobuf,还需要protoc-g…

LSTM时间序列模型实战——预测上证指数走势

LSTM时间序列模型实战——预测上证指数走势 关于作者 作者:小白熊 作者简介:精通python、matlab、c#语言,擅长机器学习,深度学习,机器视觉,目标检测,图像分类,姿态识别,…

影刀RPA实战:Excel排序、替换与格式

1.实战目标 今天继续介绍影刀RPA操作Excel的指令,内容替换,数据排序与单元格格式设置,这几个功能在日常工作中使用率还是比较频繁的。我们可以使用影刀来处理这些重复繁琐的工作。 2.内容替换 我们手动替换内容时 打开Excel文件&#xff1…

鸿蒙进入“无人区”:该如何闯关?

按照华为方面的说法,“打造鸿蒙操作系统是三大战役,目前已经完成了底座和体验两大战役,第三大战役则是生态。”生态固然重要,但要让鸿蒙与当今世界主流操作系统抗衡,乃至成为新一代操作系统中的翘楚,其实还…

上市四天暴涨又暴跌,扫描全能王背后公司坐上“过山车”

股价四天涨五倍,遇到回调跌一半,扫描全能王母公司——合合信息,一上市就坐上了“过山车”。 合合信息其实早在2021年就向科创板申请上市,并在2023年成功过会,但直到9月13日才开启申购,IPO之路一走就是三年…

springboot-网站开发-thymeleaf引擎报错找不到指定的页面模板文件

springboot-网站开发-thymeleaf引擎报错找不到指定的页面模板文件! 这种错误的情况,发生,一般都是因为,我们自己的html模板文件,存档位置并不是在默认的templates下面。而是我们自己新建的一个子目录里面。然后&#x…

又被Transformer秀到了!结合小样本学习发A会!

在有限的数据资源下,为了训练出高性能的机器学习模型,我们常会考虑Transformer小样本学习。 这是因为Transformer能从有限的数据中提取更多有用的信息,这样与小样本学习结合,可以更有效的帮助我们提高模型的性能,加速…

Vue84 vue3项目结构分析

打开main.js文件,发现和vue2不同 //引入的不再是Vue构造函数了,引入的是一个名为createApp的工厂函数 import { createApp } from vue import App from ./App.vue//创建应用实例对象——app(类似于之前Vue2中的vm,但app比vm更“轻”) const …

Chrome(谷歌)浏览器 数据JSON格式美化 2024显示插件安装和使用

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 没有美化的格式浏览器展示 美化之后效果图 安装流程 下载地址 https://github.com/gildas-lormeau/JSONVue 点击下载 下载成功,如图所示 解压文件 添加成功,如图所示 通过浏览器…

Python测试框架--Allure

严格意义上讲 Allure 不算是测试框架,但是它是生成漂亮测试报告的开源工具,搭配 Pytest 测试框架食用更搭。 也就是说 Allure 是在 Pytest 执行完生成的测试数据的基础上,对测试数据进行处理统计,生成格式统一、美观的测试报告。 …

C语言函数栈帧的创建与销毁(32)

文章目录 前言一、什么是函数栈帧?二、理解函数栈帧能解决什么问题?三、函数栈帧的创建和销毁解析什么是栈?认识相关寄存器和汇编指令 四、解析函数栈帧的创建和销毁预备知识函数的调用堆栈准备环境转到反汇编函数栈帧的创建函数栈帧的销毁 五…

FreeRTOS学习总结

背景:在裸机开发上,有时候我们需要等待某个信号或者需要延迟时,CPU的运算是白白浪费掉了的,CPU的利用率并不高,我们希望当一个函数在等待的时候,可以去执行其他内容,提高CPU的效率,同…

视频格式不支持播放怎么办?几招教你转换成mp4格式

视频已成为我们生活中不可或缺的一部分,无论是学习、娱乐还是工作交流,视频都扮演着重要角色。然而,在享受视频带来的便利时,我们时常会遇到一个令人头疼的问题——视频格式不支持播放。不同设备、平台和软件对视频格式的支持各不…

什么是组态软件?Web组态软件又是什么?

从事相关工作的对“组态软件”应该都不陌生,那Web组态软件又是什么呢?本文将对Web组态可视化软件(下称“Web组态软件”)做简单介绍,可视化编辑器是Web组态软件中的一个重要功能模块。除了编辑器,还有哪些功能模块?又…

leetcode---素数,最小质因子,最大公约数

1 判断一个数是不是质数(素数) 方法1&#xff1a;依次判断能否被n整除即可&#xff0c;能够整除则不是质数&#xff0c;否则是质数 方法2&#xff1a;假如n是合数&#xff0c;必然存在非1的两个约数p1和p2&#xff0c;其中p1<sqrt(n)&#xff0c;p2>sqrt(n)。 方法3&…

医院管理新思维:Spring Boot技术应用

5系统详细实现 5.1 医生模块的实现 5.1.1 病床信息管理 医院管理系统的医生可以管理病床信息&#xff0c;可以对病床信息添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 病床信息管理界面 5.1.2 药房信息管理 医生可以对药房信息进行添加&#xff0c;修改&#xff0c;…

Java中System类和RunTime类的Api

目录 System 类 1)out 2)err 3)in 4)currentTimeMillis() 5)nanoTime() 6)arraycopy(Object 要从里面复制东西的数组, int 要从里面复制东西数组的索引起始位置, Object 获得复制元素的数组, int 获得复制元素数组的起始索引, int 要复制东西的个数) 7)gc() 8)exit(int status)…

运维工具之ansible

Ansible 1.什么是ansible? ​ ansible是基于ssh架构的自动化运维工具&#xff0c;由python语言实现&#xff0c;通过ansible可以远程批量部署等。 2.部署前提 ​ 控制端需要安装ansible,被控制端要开启ssh服务&#xff0c;并允许远程登录&#xff0c;被管理主机需要安装py…

探讨Facebook在全球社交网络中的技术优势

Facebook作为全球最大的社交网络之一&#xff0c;其技术优势在于多个方面&#xff0c;这些优势不仅塑造了用户体验&#xff0c;也影响了整个社交媒体生态。 个性化用户体验 Facebook通过分析用户的行为和兴趣&#xff0c;提供个性化的内容推荐。利用机器学习算法&#xff0c;平…

仅用一分钟,AI如何帮你构建完整的论文初稿?揭秘背后科技!

大家好&#xff01;在今天的分享中&#xff0c;我们将深入探讨一项令人兴奋的技术进展&#xff1a;仅用一分钟&#xff0c;AI如何帮助你构建一篇完整的论文初稿。这项技术不仅节省了研究人员和学生的宝贵时间&#xff0c;还改变了我们对学术写作的传统认知。 首先&#xff0c;…