我正在扫描支票,我想读取扫描支票的支票号码和银行路由号码。请任何人帮我提供示例代码。
答案 0 :(得分:9)
美国和世界上许多其他地方使用的路由和帐号的原始方案专门针对机器读取的能力进行了优化。早期他们使用单通道磁读头来执行此读取,因为用于打印这些数字的墨水是磁性的。这意味着即使用邮票遮盖,写下其他印刷材料,也可以读取数字。
事实上,一旦你理解了角色的形成方式,阅读这些内容的能力就相当简单了。可能最容易理解的方法是查看相关专利的第一页:
http://www.freepatentsonline.com/3000000.pdf
所以你有一个数字,每个数字旁边都是一个简短的图表。此图表描述了在水平扫描数字时用于打印数字的墨水量。
您可以很容易地看到,每个号码都有一个非常独特的签名。在这方面,实际的MICR字体(E-13B)更加鲜明,围绕这些数字的特殊字符和终结符具有相同的特征 - 当您沿着它们水平扫描时,它们具有唯一的签名,并计算出多少“黑色”用于每个垂直柱。
我没有MICR规格在我面前,但它的四四方方的外观发生在我认为0.013英寸的网格上。
所以你只需要做一点功能识别(找到支票的角落,因为数字总是打印在同一个地方)然后你可以简单地扫描每个垂直列,加上黑色像素的数量形成“信号”并寻找功能。通过调整图像大小以使每0.013英寸获得四个像素,可以减少必须处理的数据量。如果您完美地进行特征识别,可以将分辨率降低到每0.013英寸1个像素,并且非常接近比较每个数字的几个大整数。
它们将足够清晰,你应该能够强制它,但如果你进入数字信号处理(或谷歌和维基百科很方便),那么你可以使用一个简单的相关器来快速识别数字,即使使用分辨率更高。
其他资源:
答案 1 :(得分:0)
您需要某种OCR库来分析扫描图像以获取有用信息。在Google上搜索“c#ocr library”产生了一些结果,包括在SO上的这个结果:https://stackoverflow.com/questions/744966/any-open-source-c-ocr-library