我有一個包含所有字體字符的庫(在我的情況下是宋體)。例如: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