Opencv中文网

均值模糊(Blur)

算法函数:Cv2.Blur

定义

void Blur(Mat src, Mat dst, Size ksize);

1. Mat src

输入原始图像。

  • 可以是单通道灰度图、3 通道 BGR 彩色图;
  • 支持 8bit、16bit、32bit 浮点等常见类型;
  • 函数不会修改原图,仅读取像素。

2. Mat dst

输出模糊后的图像。

  • 尺寸、通道数、数据类型必须和 src 完全一致;
  • 使用完记得释放,避免内存泄漏。

3. Size ksize(核心:卷积核大小)

new Size(width, height),你代码里写的 new Size(ksize, ksize) 代表正方形卷积核

  • 要求:宽、高必须是正奇数(3、5、7、9……) 例:Size(3,3) 3×3 均值核,最常用;越大模糊越强、速度越慢。
  • 如果传入偶数,OpenCV 内部会自动向上取最近奇数。

原理:ksize 越大,参与均值计算的周围像素越多,画面越模糊。

4. Point anchor 锚点

卷积核的参考锚点位置,默认 Point(-1,-1)

  • (-1,-1):锚点自动取卷积核正中心(绝大多数场景固定用这个);
  • 格式:Point(x,y),x 范围 [0, ksize.Width-1],y 范围 [0, ksize.Height-1]
  • 一般不需要修改,只有做偏移滤波、特征定位时才手动指定。

5. BorderTypes borderType 边界填充模式

当卷积核滑动到图像边缘时,边缘像素没有足够邻域像素参与均值计算,OpenCV 会按照该模式向外虚拟扩展像素。

常用枚举:

  1. BorderTypes.Reflect101(默认) 镜像反射(不重复边缘像素),模糊边缘最自然,推荐日常使用。
  2. BorderTypes.Replicate 复制图像最边缘一行 / 一列向外填充。
  3. BorderTypes.Constant 纯色填充(黑色 / 白色),边缘容易出现黑边白边。
  4. BorderTypes.Wrap 循环平铺填充。

补充:均值模糊原理

3×3 均值模糊:用周围 9 个像素的平均值作为当前锚点像素值,用来降噪、平滑画面、弱化纹理。

常见示例

csharp

运行

// 3×3均值模糊,默认中心锚点、默认镜像边界填充
Cv2.Blur(src, dst, new Size(3, 3));

// 5×5强模糊,指定边缘复制填充
Cv2.Blur(src, dst, new Size(5, 5), new Point(-1, -1), BorderTypes.Replicate);

常见踩坑

  1. ksize 不能设为 Size(0,0)、负数;
  2. 想要边缘无明显黑边,不要随便用 BorderTypes.Constant
  3. 模糊强度不够就增大 ksize,不要反复多次小核模糊(性能差)。
public override Mat Execute(Mat src)
{
    Mat dst = new Mat();
    Cv2.Blur(src, dst, new Size(ksize, ksize), new Point(-1, -1), BorderType);
    return dst;
}

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