Python OpenCV图像模糊处理:均值、高斯与双边滤波详解
本文详细介绍Python OpenCV中三种核心图像模糊处理技术:均值滤波、高斯滤波及高斯双边滤波。通过解析cv2.blur、cv2.GaussianBlur和cv2.bilateralFilter函数的参数机制与适用场景,帮助开发者理解不同滤波器在去噪与边缘保留方面的差异,并提供完整的代码实现示例。
在深度学习领域常见的卷积操作,实际上在OpenCV库中可以通过特定的图像处理函数来实现,这类操作通常被称为图像的模糊或滤波处理。
均值滤波
在OpenCV中实现均值滤波主要依赖cv2.blur(src, ksize)函数。该函数的具体参数定义如下:
src:代表输入的原始图像。ksize:定义模糊核的尺寸大小。
其工作原理是计算内核覆盖区域内所有像素的平均值,并用该平均值替换中心位置的像素点。以3x3的标准化盒式过滤器为例,其结构如下:

- 主要特征在于核内所有区域对结果的贡献率是相同的。
- 应用场景:该方法在去除椒盐噪声方面表现较为有效。
# -*-coding:utf-8-*-
"""
File Name: image_deeplearning.py
Program IDE: PyCharm
Date: 2021/10/17
Create File By Author: Hong
"""
import cv2 as cv
def image_blur(image_path: str):
"""
图像卷积操作:设置卷积核大小,步距
:param image_path:
:return:
"""
img = cv.imread(image_path, cv.IMREAD_COLOR)
cv.imshow('input', img)
# 模糊操作(类似卷积),第二个参数ksize是设置模糊内核大小
result = cv.blur(img, (5, 5))
cv.imshow('result', result)
cv.waitKey(0)
cv.destroyAllWindows()
if __name__ == '__main__':
path = 'images/2.png'
image_blur(path)
处理效果展示如下:

高斯滤波
高斯滤波功能由cv2.GuassianBlur(img, ksize,sigmaX,sigmaY)函数提供。
参数说明:sigmaX和sigmaY分别对应X轴和Y轴方向的标准偏差。若仅指定了sigmaX,则sigmaY将自动与sigmaX保持一致;若两者均设为零,系统将根据内核大小自动计算标准偏差值。
- 核心特征:核内各区域的贡献率与其距离中心的远近成正比,权重分布遵循高斯分布规律。
- 主要作用:高斯模糊在消除图像中的高斯噪声方面具有显著效果。
def image_conv(image_path: str):
"""
高斯模糊
:param image_path:
:return:
"""
img = cv.imread(image_path, cv.IMREAD_COLOR)
cv.imshow('img', img)
# 高斯卷积(高斯滤波), 可以设置ksize,必须为奇数,不为0时,后面的步骤不起作用;也可以设置成(0,0),然后通过sigmaX和sigmaY计算标准偏差
result = cv.GaussianBlur(img, (0, 0), 15)
cv.imshow('result', result)
cv.waitKey(0)
cv.destroyAllWindows()
if __name__ == '__main__':
path = 'images/2.png'
image_conv(path)
处理效果展示如下:

高斯双边滤波
实现双边滤波(模糊)需调用cv2.bilateralFilter(img,d, sigmaColor, sigmaSpace)函数。
参数说明:d指定邻域直径;sigmaColor为空间高斯函数的标准差,该参数值越大,距离中心较远的像素影响越小。
sigmaSpace表示灰度值相似性高斯函数的标准差,该参数值越大,颜色相近像素的影响范围越广。
双边滤波属于一种非线性滤波方法,它综合考量了图像的空间邻近度与像素值的相似度。通过结合空间信息与灰度相似性,该方法在去噪的同时能够保留边缘信息,具备简单、非迭代及局部处理的优点。其保边去噪的能力源于滤波器由两部分构成:一部分由几何空间距离决定系数,另一部分由像素差值决定系数。
- 主要特征:计算耗时相对较长。
- 主要作用:在实施滤波去噪的同时,能够有效保留图像的边缘细节信息。
# 边缘保留滤波器——高斯双边模糊
def image_bifilter(image_path: str):
"""
高斯双边模糊
:param image_path: 图片文件
:return: 无返回值
"""
img = cv.imread(image_path, cv.IMREAD_COLOR)
cv.imshow('input', img)
# 第三个参数是设置色彩、第四个参数是设置图像坐标
result = cv.bilateralFilter(img, 0, 50, 10)
cv.imshow('result', result)
cv.waitKey(0)
cv.destroyAllWindows()
if __name__ == '__main__':
path = 'images/2.png'
image_bifilter(path)
处理效果展示如下:

以上就是关于Python OpenCV图像模糊处理的详细流程介绍,涉及更多Python图像模糊处理相关内容,欢迎查阅本站往期文章或继续关注后续更新,感谢支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









