0

在这种情况下不知道从什么开始我必须从以下 tiff 图像中提取红色块图像在此处输入图像描述

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

4

1 回答 1

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;
    }
于 2012-09-11T07:34:20.717 回答