テストサンプル写真
拡張すると、出力ピクセル値は、構造要素で覆われた入力画像の最大ピクセル値です。
グレースケール画像では、白は 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);
}
追加の指示:
- この場合に使用される .NET の OpenCV ライブラリはOpenCvSharp4です。
- テスト画像は理想的な画像であり、実際の環境では元の画像にノイズ除去や二値化などの前処理が必要になります。
- 背景が黒で線が白の場合は、膨張 - 腐食の逆の操作を実行することで同じ効果を得ることができます。