我有一个包含所有字体字符的库(在我的情况下是宋体)。例如:OCR由于字体细节而失败
我使用这个库从图像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);
}
}
这是非常快速和可靠的..但如果从满足上述条件,你不能得到一个结果..很遗憾。
[所以,它已经到了这个。](http://xkcd.com/1015/) – Bob2Chiv 2012-03-30 15:35:08
您发布的代码只是比较图像,它根本不涉及字符识别部分。根据你如何处理这个,它不是一个真正的图像比较问题:例如,你可以比较字符组合。但作为一个图像问题,比较单个像素,而不是整个图像,并允许一些错误标准,但仍然返回一个可能的匹配。如果你将它连接到你的字符识别功能,你可以允许在经常被严格限制的字符中出现更多的错误。 – 2012-03-30 15:36:56
@JamieF第一步是裁剪角色。第二步是通过字典(字典<字符串,位图>)进行迭代,并在满足条件image1 = image2时返回一个值。然后打破循环。这是我的算法来做OCR ..但实际上它更复杂;) – Alex 2012-03-30 15:44:41