测试样图
膨胀,输出的像素值是结构元素覆盖下输入图像的最大像素值
灰度图中白色为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
- 测试图像为较理想图像,实际环境中还需对原始图像进行去噪和二值化等预处理;
- 若背景为黑色,线条为白色,进行膨胀的逆操作–腐蚀即可达到相同效果
扫描二维码关注公众号,回复:
16632060 查看本文章