在这种情况下不知道从什么开始我必须从以下 tiff 图像中提取红色块图像
提取后,我必须阅读图表并获得如下输出:- 如果 1 - 下班 2 - 卧铺泊位 3 - 驾驶 4 - 上班,则下图应为 22222243333131331332222。应该使用什么算法我使用 C# 作为编程语言
在这种情况下不知道从什么开始我必须从以下 tiff 图像中提取红色块图像
提取后,我必须阅读图表并获得如下输出:- 如果 1 - 下班 2 - 卧铺泊位 3 - 驾驶 4 - 上班,则下图应为 22222243333131331332222。应该使用什么算法我使用 C# 作为编程语言
也许 MODI 会帮助你:
http://www.codeproject.com/Articles/29172/Converting-Images-to-Text-using-Office-2007-OCR-Op
更新:
我认为,您尝试了正确的方式(AForge.net)。使用 AForge.Math.Geometry.SimpleShapeChecker 类,您将找到所有矩形。我会再试一次。
更新
使用 Aforge.net,您可以比较两个图像。在您的问题中,您需要将每个单元格与原始空单元格(标准单元格)进行比较。并按相似度排序,所以前 24 个单元格是您需要的(最不相似的单元格)。
像这样:
private void ProccessBitmap(Bitmap img, Bitmap original_cell)
{
int cellWidth = img.Width / 24;
int cellHeight = img.Height / 4;
IList<KeyValuePair<float, Rectangle>> table = new List<KeyValuePair<float, Rectangle>>();
Bitmap cell;
Rectangle rect;
AForge.Imaging.ExhaustiveTemplateMatching tm = new AForge.Imaging.ExhaustiveTemplateMatching(0);
for (int rowIndex = 0; rowIndex < 4; rowIndex++)
{
for (int colIndex = 0; colIndex < 24; colIndex++)
{
rect = new Rectangle(colIndex * cellWidth, rowIndex * cellHeight, cellWidth, cellHeight);
cell = img.Clone(rect, img.PixelFormat);
var matchings = tm.ProcessImage(original_cell, cell);
table.Add(new KeyValuePair<float, Rectangle>(matchings[0].Similarity, rect));
cell.Dispose();
}
}
using (Graphics gr = Graphics.FromImage(img))
{
gr.DrawRectangles(new Pen(Color.Red, 3.0f), table.OrderBy(a => a.Key).Take(24).Select(a => a.Value).ToArray());
}
pictureBox1.Image = img;
}