C#.Net中图形的光学标记或字符识别

时间:2012-09-11 06:51:32

标签: c# ocr optical-mark-recognition

在这种情况下,不知道如何开始我必须从以下tiff中提取红色块图像enter image description here

提取后我必须阅读图表并获得如下输出: - 如果 1 - 关闭 2 - 卧铺泊位 3 - 驾驶 4 - 值班 然后下图应该给出22222243333131331332222。应该使用什么算法我使用C#作为编程语言

1 个答案:

答案 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;
    }