膨張と腐食のアプリケーション -- OpenCV が画像の水平線と垂直線を削除します (C#)

テストサンプル写真
ここに画像の説明を挿入します

拡張すると、出力ピクセル値は、構造要素で覆われた入力画像の最大ピクセル値です。
グレースケール画像では、白は 255、黒は 0 です。

ここに画像の説明を挿入します


腐食、出力ピクセル値は、構造要素で覆われた入力画像の最小ピクセル値です

ここに画像の説明を挿入します

縦線を除去する

縦線を削除するアイデア:
線枠よりも大きい幅と 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);
}

レンダリング

ここに画像の説明を挿入します

横線を削除する

水平線を削除するアイデア:
幅 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);
}

ここに画像の説明を挿入します

追加の指示:

  1. この場合に使用される .NET の OpenCV ライブラリはOpenCvSharp4です。
  2. テスト画像は理想的な画像であり、実際の環境では元の画像にノイズ除去や二値化などの前処理が必要になります。
  3. 背景が黒で線が白の場合は、膨張 - 腐食の逆の操作を実行することで同じ効果を得ることができます。

.NET環境用のOpenCvライブラリ

おすすめ

転載: blog.csdn.net/weixin_40671962/article/details/126943016