OpenCV高斯滤波器、双边滤波器的讲解与实战(附Python源码)

简介: OpenCV高斯滤波器、双边滤波器的讲解与实战(附Python源码)

需要源码和图片请点赞关注收藏后评论区留言私信~~~

一、高斯滤波器

高斯滤波也被称为高斯模糊或者高斯平滑,是目前应用最广泛的平滑处理算法,高斯滤波可以很好的在降低图片噪声,细节层次的同时保留更多的图像信息,经过处理的图像呈现磨砂玻璃的滤镜效果

在高斯滤波中,越靠近核心的像素权重越大,越远离核心的像素权重越小,高斯滤波的计算过程涉及卷积运算,会有一个与滤波核带线啊哦相等的卷积核,卷积核中保存的值就是核所覆盖区域的权重值

像素与卷积核进行卷积计算

opencv将高斯滤波器封装成了GaussianBlur方法 语法格式如下

dst=cv2.GaussianBlur(src,ksize,sigmaX,sigmaY,borderType)

sigmaX 卷积核水平方向的标准差

sigmaY 卷积核垂直方向的标准差

修改sigmaX或者sigmaY的值都可以改变卷积核中的权重比例,也可以设置为0,该方法会根据滤波核的大小自动计算合适的权重比例

下面对花朵图像进行高斯滤波处理

滤波核越大,处理之后的图像就越模糊,和均值滤波,中值滤波处理的图像相比,高斯滤波处理的图像更加平滑,保留的图像更多,更容易辨认

部分代码如下

import cv2
img = cv2.imread("amygdalus triloba.jpg")  # 读取原图
dst1 = cv2.GasianBlur(img, (5, 5), 0, 0)  # 使用大小为5*5的滤波核进行高斯滤波
dst2 = cv2.GaianBlur(img, (9, 9), 0, 0)  # 使用大小为9*9的滤波核进行高斯滤波
dst3 = cv2.GaussianBlur(img, (15, 15), 0, 0)  # 使用大小为15*15的滤波核进行高斯滤波
cv2.imshow("im", img)  # 显示原图
cv2.imshw("5", dst1)  # 显示滤波效果
cv2.imshow("9", dst2)
cv2.imshw("15", dst3)
cv2.waitKey()  # 按下任何键盘按键后
cv2.deroyAllWindows()  # 释放所有窗体

二、双边滤波器

上面几种滤波方法都会使整幅图像变得平滑,图像中的边界会变得模糊不清,双边滤波使一种在平滑处理过程中可以有效保护边界信息的滤波操作方法。

双边滤波器自动判断滤波核处于平坦区域还是边缘区域,如果滤波核处于平坦区域,则会使用类似高斯滤波的算法进行滤波,如果滤波核处于边缘区域,则加大边缘像素的权重,尽可能地让这些像素值保持不变

opencv将双边滤波器封装成bilateralFilter方法 语法格式如下

dst=cv2.bilateralFilter(src,d,sigmaColor,sigmaSpace,borderType)

d 以当前像素为中心的整个滤波区域的直径

sigmaColor 参与计算的颜色范围,这个值使像素颜色值与周围颜色值的最大差值,只有颜色值之差小于这个值时,周围的像素才进行滤波计算,值为255时,表示所有颜色都参与计算

sigmaspace 该值越大 参与计算的像素数量就越多

下面对比高斯滤波和双边滤波的处理效果

可见双边滤波明显清晰一些,并且边界信息保存的更好

部分代码如下

import cv2
img = cv2.imread("amygdalus triloba.jpg")  # 读取原图
dst1 = cv2.GauianBlur(img(15, 15), 0, 0)  # 使用大小为15*15的滤波核进行高斯滤波
# 双边滤波取范围直径为15,颜色差为120
dst2 = cv2.bilateralFilter(img, 15, 120, 100)
cv2.imshow("img", img)  #示原图
cv2.imshow(auss", dst1)  # 显示高斯滤波效果
cv2.show("bilateral", dst2)  # 显示双边滤波效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAWindows()  # 释放所有窗体

总结

噪声指的是一幅图像内部的、高亮度的像素点。图像平滑处理是指在尽量保留原图像信息的情况下,去除图像内部的这些高亮度的像素点(即“噪声”)。为了实现图像平滑处理,需要的工具就是滤波器。虽然每种滤波器的实现原理都不同,但是每种滤波器都能对图像进行图像平滑处理

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
4天前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
55 7
|
8天前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
5天前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
48 0
|
12天前
|
机器学习/深度学习 监控 数据挖掘
Python 高效清理 Excel 空白行列:从原理到实战
本文介绍如何使用Python的openpyxl库自动清理Excel中的空白行列。通过代码实现高效识别并删除无数据的行与列,解决文件臃肿、读取错误等问题,提升数据处理效率与准确性,适用于各类批量Excel清理任务。
232 0
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
3296 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
183 4
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
WK
|
编解码 计算机视觉 Python
如何在OpenCV中进行图像转换
在OpenCV中,图像转换涉及颜色空间变换、大小调整及类型转换等操作。常用函数如`cvtColor`可实现BGR到RGB、灰度图或HSV的转换;`resize`则用于调整图像分辨率。此外,通过`astype`或`convertScaleAbs`可改变图像数据类型。对于复杂的几何变换,如仿射或透视变换,则可利用`warpAffine`和`warpPerspective`函数实现。这些技术为图像处理提供了强大的工具。
WK
470 1
|
算法 计算机视觉
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
563 1

推荐镜像

更多