在这种情况下,不知道如何开始我必须从以下tiff中提取红色块图像
提取后我必须阅读图表并获得如下输出: - 如果 1 - 关闭 2 - 卧铺泊位 3 - 驾驶 4 - 值班 然后下图应该给出22222243333131331332222。应该使用什么算法我使用C#作为编程语言
答案 0 :(得分:0)
也许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;
}