本文应用传统交点方法来提取框线表格,主要是针对存在合并单元格的表格,并用tesseract-ocr来做了文字识别,主要难点是前者的提取部分,现将部分方法分享给大家。
建议各位可以先去看其他博主针对简单表格的提取方法,再来看这篇,因为我省略了很多内容,主要讲方法,不建议之前完全没了解过的朋友来看,推荐一篇:
python-opencv表格识别_我想问问天的博客-CSDN博客_opencv 表格识别
本人第一次发文章,该表格结构提取只提供思路,不涉及代码,如有不到位的地方,还望指出。
一、表格提取的难点
1.合并单元格
我查看了许多发表在csdn上的博文,传统方法就是利用框线相交,获得交点以此来提取单元格,但是大多数都是针对简单的表格,在实际的办公场景中,我们更多的遇见存在合并单元格的复杂表如下图,那么就需要一套复杂的方法提取。
2.图像处理
图像的预处理是至关重要的一步,必须要减少图像中存在的各类干扰,目的是将能够准确提取交点,整个提取过程,都是依照交点坐标进行的,图像预处理可参考其他博主的,一般情况需要进行图像二值化、灰度化、去噪、锐化等处理......
举个例子:存在某些图像,其框线的交接部分并没有连接,不能提取出交点,那就可以利用Opencv库中的方法,将检测出来的框线延长一些,使得能得到交点,如下图。


因为图像处理部分至关重要,将影响之后的表格结构提取和文字识别,所以需要各位不断去调试,以达到理想效果,我认为这也是传统方法的局限性,所以当前热门的都是用深度学习的方法。
二、表格提取过程
图像预处理完成后,就来到了本文章的主要内容——提取表格结构
整个提取过程分为两步:
1.交点分类
2.依据交点类别进行表格提取
1.交点分类
这是一张原始图片,存在合并单元格的情况,因为这篇文章重要讲述方法,不讲太多图像处理过程,所以使用了清晰度高的图像,但是必须要强调图像预处理的重要性。
(1)经过二值化、灰度化之后
(2)提取横线和竖线,经过腐蚀膨胀,故线条比原图要长一些
(3)将横线和竖线叠加,目的是获得交点
(4)经过叠加,则获取了交点,标记为黑点
(5)进行交点分类,首先标识出代表每个单元格的标志点,例如下图单元格中,p1点则为标志点,即代表当前单元格。

以上述信息,即可将图中交点进行初次分类,其中标志点为红色点:
当前分类远远不够,仍不能将表格单元格很好提取,需要再次进行分类,保留红色点,以及表格最下和最右上的点的颜色,其余点设为绿色,如图:
(6)按照不同颜色类型的交点,设计一套方法,即可将每个单元的区域位置得到。
(7)接下来的步骤就是将截取的各个单元格保存在文件夹中,记录单元格位置信息,为之后的表格结构还原和文字识别做准备。
3.实际演示




