算法函数: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 会按照该模式向外虚拟扩展像素。
常用枚举:
- BorderTypes.Reflect101(默认) 镜像反射(不重复边缘像素),模糊边缘最自然,推荐日常使用。
BorderTypes.Replicate复制图像最边缘一行 / 一列向外填充。BorderTypes.Constant纯色填充(黑色 / 白色),边缘容易出现黑边白边。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);
常见踩坑
- ksize 不能设为
Size(0,0)、负数; - 想要边缘无明显黑边,不要随便用
BorderTypes.Constant; - 模糊强度不够就增大 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;
}
若文章对您有帮助,可以激励一下我哦,祝您平安幸福!
| 微信 | 支付宝 |
|---|---|
![]() |
![]() |

