Python OpenCV 图像模糊处理:均值、高斯与双边滤波详解

小石头
小石头
发布时间:2026-10-15| 2人浏览过
原创

本文详细介绍 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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。