前言
这学期我们上了一门软件工程课和数字图像处理课,软件工程课课设要求大家设计一款软件。作为一个学生助理,我早就对学校的问卷调查不满意了,填写完的纸质表格竟然还要输入成电子表格,人工手动输入,未免也太难受了。所以结合我所学的知识,我准备利用python+opencv做一款纸质文档识别软件,专门识别纸质表格转化成为电子表格。
原理
因为表格不仅仅有文字信息,同时还有位置信息,所以在识别表格时我们应该识别出文字和位置信息。文字信息一般是可以用OCR技术识别出来,这部分有很多相关的模块、库可以使用,但是位置信息的识别就有一定的困难。所以我们首先要解决这个位置信息。
当我们拿到一张纸质表格时,一般来说都会有框体,这个时候我们只要把最外围的框体识别出来,接着递归识别所有框体,然后再对所有小框体进行进行文字识别操作就会很简单。
实现方法
很明显,第一步是要解决最外头的这个框线识别问题。一般来说,不是每个人拍照都是横平竖直的,所以我们必须要对原始图像进行适当的倾斜矫正。在opencv里,我们有两个很好用的函数来进行这样的操作:
先用cv2.getPerspectiveTransform(target_points, four_points)得到旋转矩阵
然后再用cv2.warpPerspective(img, M, (weight, height))进行透视变换。
下面是该函数的一个演示
如果我们知道屏幕中间的四个角的位置,那么我们就能把它通过函数给校正
1 | # -*- coding: utf-8 -*- |
程序运行效果图
旋转裁切的效果很棒,但这只是人工的方式寻找四个角点,可不可以想办法实现程序自动裁切呢?
对于这个问题,我经过大量地查阅资料和实验,终于发现了一个比较好的办法。那就是先把轮廓线找到,然后找轮廓线里面的角点。
由于篇幅关系,我将把这个留在后面讲解