有图像,图像中有一些垂直或水平的网格线。我只想从图像中提取网格,但图像中有许多不必要的线条,干扰了我的工作。有没有人有更多方法通过C#提取网格?
我的想法是,对于网格线,有一些基本单位组成整个网格,所以如果我知道基本单位的大小,我知道网格的初始点,也许我可以重新绘制网格。因此,我认为这是解决问题的关键。
答案 0 :(得分:0)
您可以采取两个方向:
我将图像加载到Photoshop中,发现网格线从(6,10)开始,光栅为43像素,线宽为1.5-2像素。
使用这些值绘制这些线是微不足道的:
Image img = Image.FromFile(yourImage);
Bitmap bmp = new Bitmap(img.Width, img.Height);
using (Graphics G = Graphics.FromImage(bmp) )
using (Pen pen = new Pen(Color.DarkBlue, 2f) )
{
G.Clear(Color.Black);
for (int x = 6; x < img.Width; x += 43)
G.DrawLine(pen, x, 0, x, img.Height);
for (int y = 10; y < img.Height; y += 43)
G.DrawLine(pen, 0, y, img.Width, y);
}
bmp.Save(yourGrid);
bmp.Dispose();
img.Dispose();
第二种选择并非无足轻重。如果图像实际上是典型的,那么好消息是直线和光栅是规则的。但是,从图像中自动提取这些值仍然不是那么简单。一个难题是网格的不同颜色。我会扫描多行并测试像素是不是黑色。那些会进入列表然后我会丢弃仅在少数这些列表中的点数。然后将对多个列重复此操作。
只有在需要对大量具有不同网格的文件进行此分析时,才会付出相应的努力。如果数量很小,半自动分析可能会更容易,如果只有一个文件,则可以进行手动分析!