Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 由于字体特定,OCR失败_C#_Image_Winforms_Comparison_Ocr - Fatal编程技术网

C# 由于字体特定,OCR失败

C# 由于字体特定,OCR失败,c#,image,winforms,comparison,ocr,C#,Image,Winforms,Comparison,Ocr,我有一个包含所有字体字符的库(在我的例子中为Arial)。例如: 我正在使用这个库从图像中提取OCR文本 问题是当您尝试OCR时,诸如“j”、“/”、“t”等字符可能会相互重叠所以OCR现在不可能了,因为字符与模式图像不匹配(最多3个像素不同) 我该如何处理这个问题?有没有更好的方法来比较图像?(C#,WinForms应用程序) 我使用这种方法进行比较: unsafe public static bool CompareMemCmp(Bitmap b1, Bitmap b2) {

我有一个包含所有字体字符的库(在我的例子中为Arial)。例如:

我正在使用这个库从图像中提取OCR文本

问题是当您尝试OCR时,诸如“j”、“/”、“t”等字符可能会相互重叠所以OCR现在不可能了,因为字符与模式图像不匹配(最多3个像素不同)

我该如何处理这个问题?有没有更好的方法来比较图像?(C#,WinForms应用程序)

我使用这种方法进行比较:

unsafe public static bool CompareMemCmp(Bitmap b1, Bitmap b2)
    {
        if ((b1 == null) != (b2 == null)) return false;
        if (b1.Size != b2.Size) return false;

        var bd1 = b1.LockBits(new Rectangle(new System.Drawing.Point(0, 0), b1.Size), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
        var bd2 = b2.LockBits(new Rectangle(new System.Drawing.Point(0, 0), b2.Size), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);

        try
        {
            IntPtr bd1scan0 = bd1.Scan0;
            IntPtr bd2scan0 = bd2.Scan0;

            int stride = bd1.Stride;
            int len = stride * b1.Height;

            return memcmp(bd1scan0, bd2scan0, len) == 0;
        }
        finally
        {
            b1.UnlockBits(bd1);
            b2.UnlockBits(bd2);
        }
    }

它非常快速可靠。。但如果满足上述条件,则无法得到结果。。不幸的是。

您可以为每个角色返回一个分数。角色就是所描绘的角色的一种概率


如果中心像素与边缘像素相匹配,则可以使分数更高,这样可以更好地进行猜测。

您可以创建这些字符对(虽然可能有不合理的数量…)“字符”,即“-j”组合将被识别为“-j”character..

您发布的代码只是比较图像,根本不涉及字符识别部分。根据处理方式的不同,这实际上不是一个图像比较问题:例如,您可以比较字符的组合。但是作为一个图像问题,比较单个像素,而不是整个图像,并考虑一些错误标准,但仍然返回可能的匹配。如果将其连接到字符识别函数,可能会在经常紧排的字符中出现更多错误。@JamieF第一步是裁剪字符。第二步是遍历dictionary(dictionary),如果满足条件image1=image2,则返回一个值。然后打破循环。这是我做OCR的算法。。但实际上要复杂得多;)它的印刷术语是“紧排”。印刷文本中的标准文本,如今在计算机生成的文本中也很常见。你必须处理它。“OCR是买的,不是建的。”谢谢,汉帕桑,以前从未听说过这个词。您知道是否可以为特定字体生成所有重叠(紧排)情况吗?不确定“u”和“u”等字符会发生什么情况。当找到字符时,通过库的迭代就停止了,因此,根据这种逻辑,将返回的第一个字母是“u”,即使它实际上是“u”(因为它们的分数几乎相同)。然后不要停止。继续确保。正如我所建议的,您可以返回按概率排序的字符列表。这是我的计划B。。但正如你所说,我不可能知道所有的情况。。可能是几十个,可能是几千个组合。。