膨胀与腐蚀应用--OpenCV去除图像中的水平垂直线(C#)

测试样图
膨胀与腐蚀应用--OpenCV去除图像中的水平垂直线(C#)_第1张图片

膨胀,输出的像素值是结构元素覆盖下输入图像的最大像素值
灰度图中白色为255,黑色为0

膨胀与腐蚀应用--OpenCV去除图像中的水平垂直线(C#)_第2张图片


腐蚀,输出的像素值是结构元素覆盖下输入图像的最小像素值

膨胀与腐蚀应用--OpenCV去除图像中的水平垂直线(C#)_第3张图片

去除垂直线

去除垂直线思路:
定义宽度大于线框,高度为1的矩形滤波核
对原图像进行膨胀操作

if (fileDialog.ShowDialog() == DialogResult.OK)
{

    picFile = fileDialog.FileName;
    inputMat = Cv2.ImRead(picFile, ImreadModes.Grayscale);
    outMat = new Mat(inputMat.Size(), inputMat.Type());
    //定义矩形滤波核心
    var kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(40, 1));
    //膨胀操作 
    Cv2.Dilate(inputMat, outMat, kernel);

    picBox_Display.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(inputMat);
    picBox_After.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(outMat);
}

效果图

膨胀与腐蚀应用--OpenCV去除图像中的水平垂直线(C#)_第4张图片

去除水平线

去除水平线思路:
定义宽度为1,高度大于线宽的矩形滤波核
对原图像进行膨胀操作

if (fileDialog.ShowDialog() == DialogResult.OK)
{

    picFile = fileDialog.FileName;
    inputMat = Cv2.ImRead(picFile, ImreadModes.Grayscale);
    outMat = new Mat(inputMat.Size(), inputMat.Type());
    //定义矩形滤波核心
    var kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(1, 40));
    //膨胀操作 
    Cv2.Dilate(inputMat, outMat, kernel);

    picBox_Display.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(inputMat);
    picBox_After.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(outMat);
}

膨胀与腐蚀应用--OpenCV去除图像中的水平垂直线(C#)_第5张图片

补充说明:

  1. 本案例在.NET使用的OpenCV库为OpenCvSharp4
  2. 测试图像为较理想图像,实际环境中还需对原始图像进行去噪和二值化等预处理;
  3. 若背景为黑色,线条为白色,进行膨胀的逆操作–腐蚀即可达到相同效果

.NET 环境的OpenCv库

你可能感兴趣的:(c#,opencv)