Opencv中文网

高斯模糊(GaussianBlur)

算法函数:Cv2.GaussianBlur

定义

void GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX);

1. Mat src

输入原始图像。

  • 支持单通道、多通道彩色 / 灰度图;
  • 图像数据类型可以是 CV_8UCV_16UCV_32FCV_64F
  • 函数只读原图,不会修改 src 内容。

2. Mat dst

高斯模糊后的输出图像。

  • 尺寸、通道、数据类型必须和 src 完全一致;
  • 使用完毕务必 Dispose,防止 OpenCV 内存泄漏。

3. Size ksize 高斯卷积核尺寸

格式:Size(宽,高),一般用正方形如 Size(5,5)Size(3,3)

两条规则:

  1. 宽高必须都是奇数:1,3,5,7,9...
  2. 可以传入 Size(0,0):此时内核大小由 sigmaX 自动计算生成,推荐高精度场景使用。

规律:核越大,模糊程度越强,耗时越高。

4. double sigmaX

X 方向(水平方向)高斯核标准差,决定模糊强度。

  • sigmaX 越大:像素权重扩散范围越大,图像越模糊;
  • 如果 ksize != Size(0,0):仅用来计算高斯核权重;
  • 如果 ksize = Size(0,0):OpenCV 根据 sigmaX 自动推导最合适的卷积核大小。

5. double sigmaY(可选,默认 = 0)

Y 方向(垂直方向)高斯核标准差:

  • sigmaY=0 时,自动赋值 sigmaY = sigmaX,水平、垂直模糊程度一致(绝大多数场景使用默认即可);
  • 如果需要横向模糊强、纵向弱,可以手动设置不同值实现非均匀模糊。

6. BorderTypes borderType(可选,默认 Reflect101)

卷积核滑到图像边缘时的像素填充方式,和 Blur 一致:

  • Reflect101:镜像填充,边缘过渡最自然,默认推荐;
  • Replicate:边缘像素向外复制;
  • Constant:纯色填充,容易出现黑边 / 白边。

两种常用写法说明

写法 1:固定卷积核大小,sigma 自动计算

// 5×5高斯核,sigmaX、sigmaY由OpenCV自动推算
Cv2.GaussianBlur(src, dst, new Size(5,5), 0);

写法 2:固定 sigma,自动生成卷积核(推荐)

// 由sigmaX=1.5自动计算最合适的核尺寸
Cv2.GaussianBlur(src, dst, Size.Empty, 1.5);

关键知识点

  1. 高斯模糊 vs 均值模糊 (Blur) 均值模糊是邻域像素等权重平均;高斯模糊是离中心越近权重越高、越远权重越低,模糊更自然,适合:图像降噪、平滑预处理、提取前景、Canny 边缘检测前预处理。
  2. 经验取值
  • 轻微降噪:Size(3,3), sigmaX=1
  • 中度平滑:Size(5,5), sigmaX=1.5~2
  • 强模糊:Size(7,7), sigmaX=2.5+

常见踩坑

  1. ksize 宽高不能是偶数,否则直接报错;
  2. sigma 设为 0 且 ksize 也为 (0,0) 会异常;
  3. 多通道图像会对每个通道单独做高斯模糊,不需要手动拆分通道。

特点:降噪同时保留边缘,视觉预处理首选。

public override Mat Execute(Mat src)
{
    Mat dst = new Mat();
    Cv2.GaussianBlur(src, dst, new Size(KSize, KSize), SigmaX, SigmaY, BorderType);
    return dst;
}

copyright @重庆教主 WPF中文网 联系站长:(QQ)23611316 (微信)movieclip (QQ群).NET小白课堂:864486030 | 本文由WPF中文网原创发布,谢绝转载 渝ICP备2023009518号-1