Opencv中文网

膨胀(Dilate)

Cv2.Erode是形态学处理最基础、最核心的函数之一,专门用于消除图像中的高亮噪点、收缩白色区域、细化轮廓、分离粘连物体

一、标题:腐蚀操作(Erode)原理 + 完整用法 + 实战场景

二、什么是腐蚀(Erode)?

腐蚀 = 让图像中的白色区域(高亮区域)向内收缩、变小、变细 **

简单理解:

  • 白色是前景,黑色是背景
  • 腐蚀 = 白色被黑色 “吃掉” 一圈

作用:

  • 去除小的白色噪点
  • 分离两个靠得太近的白色物体
  • 细化文字、线条
  • 配合二值化使用,清理图像

三、函数原型(OpenCVSharp C#)

void Erode(
    InputArray src,          // 输入图像
    OutputArray dst,         // 输出图像
    InputArray kernel,       // 结构元素(卷积核)
    Point? anchor = null,    // 锚点(默认中心)
    int iterations = 1,      // 迭代次数(执行几次腐蚀)
    BorderTypes borderType = BorderTypes.Constant,  // 边界填充
    Scalar? borderValue = null
);

四、参数逐行详解

1. src(输入图像)

  • 可以是二值图、灰度图、彩色图
  • 99% 场景是二值图(黑白色)
  • 白色 = 前景
  • 黑色 = 背景

2. dst(输出图像)

  • 大小、类型与原图完全一致

3. kernel(结构元素 / 卷积核)

最重要参数!决定腐蚀的形状和大小

必须用下面这个函数创建:

Mat kernel = Cv2.GetStructuringElement(
    MorphShapes.Rect,        // 核形状:矩形、椭圆、十字
    new Size(3, 3)           // 核大小:3x3 / 5x5 / 7x7...
);

支持三种形状:

  • Rect:矩形(最常用)
  • Ellipse:椭圆
  • Cross:十字形

核越大 → 腐蚀效果越强

4. anchor(锚点)

  • 默认 (-1,-1) = 核中心
  • 不用改,直接传 null 即可

5. iterations(迭代次数)

  • 执行多少次腐蚀
  • 次数越多 → 白色收缩越明显

6. borderType / borderValue

  • 边界处理,默认即可,不用改

五、腐蚀到底是怎么计算的?(超简单)

以 3x3 核为例:

  • 以每个像素为中心,看周围 3x3 区域
  • 取区域内最小值 作为中心像素新值
  • 白色 = 255,黑色 = 0→ 只要周围有黑色,中心就会变成黑色→ 白色区域不断缩小

六、最标准、最常用代码(直接复制)

using OpenCVSharp;

class Program
{
    static void Main()
    {
        // 1. 读入图像
        Mat src = Cv2.ImRead("binary.png", ImreadModes.Color);

        // 2. 转灰度 + 二值化(必须)
        Mat gray = new Mat();
        Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY);

        Mat binary = new Mat();
        Cv2.Threshold(gray, binary, 0, 255, ThresholdTypes.Binary | ThresholdTypes.Otsu);

        // 3. 创建腐蚀核(3x3 矩形)
        Mat kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(3, 3));

        // 4. 腐蚀操作(核心代码)
        Mat erodeResult = new Mat();
        Cv2.Erode(binary, erodeResult, kernel, null, 1);

        // 保存
        Cv2.ImWrite("erode.png", erodeResult);
    }
}

七、腐蚀的 4 大经典用途

1. 去除小白点噪点

图像上有零星小白点 → 腐蚀一次就消失

2. 分离粘连的白色物体

两个白色物体连在一起 → 腐蚀后自动分开

3. 细化文字 / 线条

让粗文字变细、粗线条变瘦

4. 预处理轮廓检测

去掉毛刺,让轮廓更干净


八、腐蚀 vs 膨胀(Dilate)

表格

操作效果用途
Erode(腐蚀)白色变小、收缩去噪、分离物体、细化
Dilate(膨胀)白色变大、扩张补洞、连接断裂、加粗

九、关键注意事项(必看)

  1. 腐蚀只对白色区域起作用
  2. 核越大、迭代次数越多 → 收缩越厉害
  3. 必须在二值化图像上使用效果最好
  4. 过度腐蚀会让物体消失

十、一句话总结

Cv2.Erode = 白色区域收缩器

用一个小核在图上滑动,让白色变小、黑色扩大,用于去噪、分离、细化。

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