算法函数:Cv2.GaussianBlur
定义
void GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX);
1. Mat src
输入原始图像。
- 支持单通道、多通道彩色 / 灰度图;
- 图像数据类型可以是
CV_8U、CV_16U、CV_32F、CV_64F; - 函数只读原图,不会修改
src内容。
2. Mat dst
高斯模糊后的输出图像。
- 尺寸、通道、数据类型必须和
src完全一致; - 使用完毕务必
Dispose,防止 OpenCV 内存泄漏。
3. Size ksize 高斯卷积核尺寸
格式:Size(宽,高),一般用正方形如 Size(5,5)、Size(3,3)。
两条规则:
- 宽高必须都是奇数:1,3,5,7,9...
- 可以传入
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);
关键知识点
- 高斯模糊 vs 均值模糊 (Blur) 均值模糊是邻域像素等权重平均;高斯模糊是离中心越近权重越高、越远权重越低,模糊更自然,适合:图像降噪、平滑预处理、提取前景、Canny 边缘检测前预处理。
- 经验取值
- 轻微降噪:
Size(3,3), sigmaX=1 - 中度平滑:
Size(5,5), sigmaX=1.5~2 - 强模糊:
Size(7,7), sigmaX=2.5+
常见踩坑
- ksize 宽高不能是偶数,否则直接报错;
- sigma 设为 0 且 ksize 也为 (0,0) 会异常;
- 多通道图像会对每个通道单独做高斯模糊,不需要手动拆分通道。
特点:降噪同时保留边缘,视觉预处理首选。
public override Mat Execute(Mat src)
{
Mat dst = new Mat();
Cv2.GaussianBlur(src, dst, new Size(KSize, KSize), SigmaX, SigmaY, BorderType);
return dst;
}
若文章对您有帮助,可以激励一下我哦,祝您平安幸福!
| 微信 | 支付宝 |
|---|---|
![]() |
![]() |

