Opencv中文网

中值滤波(MedianBlur)

算法函数:MedianBlur

定义

void MedianBlur(Mat src, Mat dst, int ksize);

1. Mat src

输入图像:

  • 支持单通道灰度图、3 通道 BGR 彩色图;
  • 常用类型:CV_8UC1 / CV_8UC3;部分版本支持CV_16UC1CV_32FC1
  • 不会修改原图,仅做读取。

2. Mat dst

滤波输出图像:

  • 尺寸、通道数、数据类型必须和 src 完全一致;
  • 使用完需要释放 Mat 资源避免内存泄漏。

3. int ksize 卷积核尺寸

强制规则:必须是大于 1 的奇数,常见:3、5、7、9……

  • 原理:以当前像素为中心,取周围 ksize × ksize 范围内所有像素,排序后取中间位置的像素值作为当前新像素;
  • ksize 越大,降噪能力越强,图像越平滑,运行速度越慢;
  • ❌ 不能写偶数(2、4、6),直接抛出 OpenCV 异常。

工作原理

  1. 滑动窗口遍历图像每一个像素;
  2. 收集窗口内所有像素灰度值并从小到大排序;
  3. 舍弃极大、极小异常值,取中间值替换中心像素; 优势:对椒盐噪声(黑白噪点、针尖状噪点)去除效果远优于高斯、均值模糊

特点对比

  1. 适合场景
    • 去除椒盐噪声、镜头灰尘噪点、细小白点黑点;
    • 二维码、条码、二值图像预处理降噪;
  2. 缺点
    • 属于非线性滤波,会一定程度模糊边缘细节;
    • 大 ksize 下速度比高斯模糊慢;
    • 不支持自定义边界填充模式(内部固定边缘处理方式,没有 borderType 参数)。
public override Mat Execute(Mat src)
{
    Mat dst = new Mat();
    Cv2.MedianBlur(src, dst, KSize);
    return dst;
}

三种模糊选型小结

  1. Blur 均值模糊:均匀平滑,适合背景平滑、简单降噪,边缘容易糊;
  2. GaussianBlur 高斯模糊:自然平滑,保留边缘相对更好,最常用的通用降噪;
  3. MedianBlur 中值模糊:专治椒盐噪点、孤立黑白杂点。

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