您很可能需要执行以下操作:
应用霍夫变换 http://en.wikipedia.org/wiki/Hough_transform整个页面上的算法,这应该会产生一系列页面部分。
对于您获得的每个部分,请再次应用。如果当前部分产生 2 个元素,那么您应该处理与上面类似的矩形。
完成后,您可以使用 OCR 提取数值。
在这种情况下,我建议您看一下JavaCV https://github.com/bytedeco/javacv(OpenCV Java Wrapper)它应该允许您处理霍夫变换部分。然后你需要类似的东西Tess4j http://tess4j.sourceforge.net/(Tesseract Java Wrapper)它应该允许您提取您想要的数字。
作为额外说明,为了减少误报数量,您可能需要执行以下操作:
如果您确定某些坐标永远不会包含您想要的数据,请裁剪图像。这将为您提供一个较小的图片供您使用。
将图像更改为灰度可能是明智的做法(假设您正在使用彩色图像)。颜色可能会对 OCR 解析图像的能力产生负面影响。
编辑:根据您的评论,给出如下内容:
+------------------------------+
| +---+---+ |
| | | | |
| +---+---+ |
| +---+---+ |
| | | | |
| +---+---+ |
| +---+---+ |
| | | | |
| +---+---+ |
| +---+---+ |
| | | | |
| +---+---+ |
+------------------------------+
您可以裁剪图像,以便通过裁剪图像来删除没有相关数据的区域(左侧的部分),您将得到如下所示的内容:
+-------------+
|+---+---+ |
|| | | |
|+---+---+ |
|+---+---+ |
|| | | |
|+---+---+ |
|+---+---+ |
|| | | |
|+---+---+ |
|+---+---+ |
|| | | |
|+---+---+ |
+-------------+
这个想法是运行霍夫变换,以便您可以获得包含矩形的页面片段,如下所示:
+---+---+
| | |
+---+---+
然后,您将再次应用霍夫变换,最终得到两段,然后选择左边的一段。
获得左侧片段后,您将应用 OCR。
You can尝试事先应用 OCR,但充其量,OCR 会识别两个数字值,包括书面值和键入值,从我得到的情况来看,这不是您想要的。
此外,描绘矩形的额外线条可能会使 OCR 偏离轨道,并导致产生不良结果。