前言

这学期我们上了一门软件工程课和数字图像处理课,软件工程课课设要求大家设计一款软件。作为一个学生助理,我早就对学校的问卷调查不满意了,填写完的纸质表格竟然还要输入成电子表格,人工手动输入,未免也太难受了。所以结合我所学的知识,我准备利用python+opencv做一款纸质文档识别软件,专门识别纸质表格转化成为电子表格。

原理

因为表格不仅仅有文字信息,同时还有位置信息,所以在识别表格时我们应该识别出文字和位置信息。文字信息一般是可以用OCR技术识别出来,这部分有很多相关的模块、库可以使用,但是位置信息的识别就有一定的困难。所以我们首先要解决这个位置信息。

当我们拿到一张纸质表格时,一般来说都会有框体,这个时候我们只要把最外围的框体识别出来,接着递归识别所有框体,然后再对所有小框体进行进行文字识别操作就会很简单。

实现方法

很明显,第一步是要解决最外头的这个框线识别问题。一般来说,不是每个人拍照都是横平竖直的,所以我们必须要对原始图像进行适当的倾斜矫正。在opencv里,我们有两个很好用的函数来进行这样的操作:
先用cv2.getPerspectiveTransform(target_points, four_points)得到旋转矩阵
然后再用cv2.warpPerspective(img, M, (weight, height))进行透视变换。
下面是该函数的一个演示

如果我们知道屏幕中间的四个角的位置,那么我们就能把它通过函数给校正

# -*- coding: utf-8 -*-
"""
Created on Sun Jan 13 09:22:51 2019@author: lei
"""import cv2
import numpy as np
img= cv2.imread('rowRotate.jpg')#读取原始图片
target_points =[[278,189],[758,336],[570,1034],[65,900]]
#这里我们通过人工的方式读出四个角点A,B,C,D
height = img.shape[0]
weight = img.shape[1]
four_points= np.array(((0, 0),(weight - 1, 0),(weight - 1, height - 1),(0, height - 1)),np.float32)
target_points = np.array(target_points, np.float32)#统一格式
M = cv2.getPerspectiveTransform(target_points, four_points)
Rotated= cv2.warpPerspective(img, M, (weight, height))
cv2.imwrite("Rotated.jpg",Rotated)

程序运行效果图

旋转裁切的效果很棒,但这只是人工的方式寻找四个角点,可不可以想办法实现程序自动裁切呢?
对于这个问题,我经过大量地查阅资料和实验,终于发现了一个比较好的办法。那就是先把轮廓线找到,然后找轮廓线里面的角点。
由于篇幅关系,我将把这个留在后面讲解

利用python进行纸质文档识别(一)图像旋转矫正相关推荐

  1. Python3-word文档操作(三):利用python修改word文档的内容

    前两篇博文中,学习了是用python的docx库创建一个word文档,并且编辑了标题和正文,以及利用python来获取word文档的内容.本篇学习利用python修改word文档的内容. 修改word ...

  2. 利用python操作word文档

    总目录:Python数据分析整理 本文代码参考自官方文档: python-docx 使用的库下载方式为:pip install python-docx 注意!! 不是:pip install docx ...

  3. Python3-word文档操作(五):利用python修改word文档中的表格数据

    1. 简介: 本篇继续学习python操作word文档的相关知识.本篇主要学习: 1)如何获取一个已经存在文档中的表格的内容: 2)如何修改一个已经存在文档中的表格的内容: 2. 获取word文档中的 ...

  4. 利用python向word文档模板中写入内容

    第一部分:先看成果 Talk is cheap show me the code!(我来翻译一哈:不bb上代码) import os os.chdir('D:\\python_major\\auto_ ...

  5. Python3-word文档操作(二):利用python获取word文档的内容

    上一篇,学习了是用python的docx库创建一个word文档,并且编辑了标题和正文.本篇继续python操作word之旅:利用python来获取word文档的内容. python脚本: # -*- ...

  6. python搜索pdf内容所在页码_利用Python在pdf文档中寻找某些词出现的页码

    要研究pdf文件的页码,首先要考虑这个文件的种类.pdf可能是一本书的电子版,可能是一份简历.可能是由Word.PPT或其他文档导出的--如果不是一本书,通常页面内容里是没有页码的:如果是一本书,虽然 ...

  7. Python3-word文档操作(一):利用python创建word文档,并且设置标题和正文的内容,设置字体样式

    本篇主要说明了如何利用docx库来进行word文档的创建,并且设置标题和正文的内容,以及字体大小. 一,效果图 苏轼的<念奴娇·赤壁怀古>,创作后的word文档内容如下图: ,其中,标题和 ...

  8. 利用Python实现word文档合并

    实现步骤: 1.安装依赖 pip install docx pip install docxcompose pip install pyinstaller // 将py文件打包成exe文件的库 2.编 ...

  9. Python读取word文档识别字段颜色,解析字段!

    python版本3.7.3,读取的文档格式为.docx 文中带有简单注释 看不懂的百度网盘下载直接查看,更改运行里面的py文件 网盘下载 Python学习交流群:1004391443 提取码:nngw ...

最新文章

  1. 1个ieee1394端口_如何使用圆形端口进行波导激励和终止
  2. 自学python系列14:映像,集合类型-集合类型
  3. Docker 安装 redis 、Redis docker 方式部署
  4. 十大面试问题解惑,秒杀一切HR、技术面试。iOS程序员必读!
  5. Redis内存回收和持久化策略
  6. java象棋人机_Java版中国象棋人机对战源代码(AI算法体现淋漓尽致)
  7. 批量对word文档进行操作
  8. 十本Java网站开发必看书籍
  9. Pickit 3 - MPLAB Target device ID does not match 解决办法之一
  10. 中国视频制作服务市场现状研究分析与发展前景预测报告(2022)
  11. HBuilderX 插件下载失败 解决
  12. docker 运行命令
  13. 同是匿名社交,国内外“秘密”大不同
  14. vs2012运行c语言出现:无法查找或打开 PDB 文件
  15. java打字小游戏_java实现打字游戏小程序
  16. 车架号 生成 java_车辆识别码VIN校验位计算方法及实现  VIN号检验、车架号检验 java、 C++...
  17. 如何更换戴尔 燃7000 Dell Inspiron 7460的电池
  18. TOPSIS算法(优劣解距离法)的使用举例与matlab实现
  19. 电容屏分类及优缺点介绍
  20. 【干货】教你用python给你的微信朋友群发私人订制的藏头诗

热门文章

  1. SAP中的client(也叫集团)的意义(中文版)
  2. 萤石云出现非h264情况解决办法
  3. 关于Forest软件金币快速获取的方法将Forest最长专注时间调整为3小时forest买植物攻略
  4. 如何搭建自己的git服务器
  5. YDOOK: ANSYS Electronic Desktop Maxwell 19 教程4:绘制方程曲线
  6. es 简单实现增加,查询,分词 热词
  7. Windows Terminal修改背景美化
  8. python图片转文字easyocr_支持40种语言的图片文字识别(OCR)项目
  9. 种群的勘探(Exploration)与开发(Exploitation)(含MATLAB代码)
  10. 【3D目标检测】HDNET: Exploiting HD Maps for 3D Object Detection论文综述(2018)