一、主要代码

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
def img_show(img_name,img):cv.imshow(img_name,img)cv.waitKey(0)cv.destroyAllWindows()
#1、数据预处理
img = cv.imread('./images/receipt.jpg')
ratio = img.shape[0] / 500.0
orig = img.copy()
img = resize(img,height=500)
#2、转为灰度图
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
#3、高斯平滑:去噪
gauss = cv.GaussianBlur(gray,(5,5),0)
#4、Canny算子:边缘检测
edge = cv.Canny(gauss,75,200)
#5、轮廓检测  计算出所有的轮廓
cnts = cv.findContours(edge.copy(),cv.RETR_LIST,cv.CHAIN_APPROX_SIMPLE)[0]
#6、对所有轮廓进行排序 找到面积最大的5个轮廓
cnts = sorted(cnts,key=cv.contourArea,reverse=True)[:5]
#7、遍历这五个轮廓 找到最外面的大轮廓
for c in cnts:peri = cv.arcLength(c,True)  #计算轮廓的周长approx = cv.approxPolyDP(c,0.02*peri,True) #计算轮廓近似if len(approx) == 4:    #找到最外边的矩形大轮廓screenCnt = approxbreak
# 8、透视变换  把图像摆正
wraped=four_point_transform(orig,screenCnt.reshape(4,2)*ratio)
# 9、二值处理 得到扫描到的文件
gray = cv.cvtColor(wraped,cv.COLOR_BGR2GRAY)
ref = cv.threshold(gray,100,255,cv.THRESH_BINARY)[1]
ref=cv.resize(ref,None,fx=0.3,fy=0.3)
#10、用OCR识别文件上的字符
import pytesseract
import os
from PIL import Image
img = cv.imread('scan.jpg')
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
gray = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)[1]
filename = "a.png"
cv.imwrite(filename,gray)test = pytesseract.image_to_string(Image.open(filename))
print(test)ref=cv.resize(img,None,fx=0.3,fy=0.3)
img_show('ref',ref)

二、结果展示

三、工具代码

def resize(image, width=None, height=None, inter=cv.INTER_AREA):dim = None(h, w) = image.shape[:2]if width is None and height is None:return imageif width is None:r = height / float(h)dim = (int(w * r), height)else:r = width / float(w)dim = (width, int(h * r))resized = cv.resize(image, dim, interpolation=inter)return resized
def order_points(pts):# 一共4个坐标点rect = np.zeros((4, 2), dtype = "float32")# 按顺序找到对应坐标0123分别是 左上,右上,右下,左下# 计算左上,右下s = pts.sum(axis = 1)rect[0] = pts[np.argmin(s)]rect[2] = pts[np.argmax(s)]# 计算右上和左下diff = np.diff(pts, axis = 1)rect[1] = pts[np.argmin(diff)]rect[3] = pts[np.argmax(diff)]return rect
def four_point_transform(image, pts):# 获取输入坐标点rect = order_points(pts)(tl, tr, br, bl) = rect# 计算输入的w和h值widthA = np.sqrt(((br[0] - bl[0]) ** 2) + ((br[1] - bl[1]) ** 2))widthB = np.sqrt(((tr[0] - tl[0]) ** 2) + ((tr[1] - tl[1]) ** 2))maxWidth = max(int(widthA), int(widthB))heightA = np.sqrt(((tr[0] - br[0]) ** 2) + ((tr[1] - br[1]) ** 2))heightB = np.sqrt(((tl[0] - bl[0]) ** 2) + ((tl[1] - bl[1]) ** 2))maxHeight = max(int(heightA), int(heightB))# 变换后对应坐标位置(-1只是为了防止有误差出现,不-1也可以。)dst = np.array([[0, 0],[maxWidth - 1, 0],[maxWidth - 1, maxHeight - 1],[0, maxHeight - 1]], dtype = "float32")# 计算变换矩阵M = cv.getPerspectiveTransform(rect, dst)warped = cv.warpPerspective(image, M, (maxWidth, maxHeight))# 返回变换后结果return warped

02-文档扫描OCR识别相关推荐

  1. OpenCV计算机视觉实战(Python)| 10、项目实战:文档扫描OCR识别

    文章目录 简介 总结 1. 介绍 2. 流程 3. 程序 4. 知识点总结 简介 本节为<OpenCV计算机视觉实战(Python)>版第10讲,项目实战:文档扫描OCR识别,的总结. 总 ...

  2. 文档扫描OCR识别-2

    凯哥英语视频 文档扫描OCR识别-2 凯哥英语视频 1.现有资源梳理 2.实现方案规划 预处理 预测 3.代码实现 注意点 模型安装和其他 结语 1.现有资源梳理 文档扫描OCR识别-1 中处理好的图 ...

  3. 深入学习OpenCV文档扫描OCR识别及答题卡识别判卷(文档扫描,图像矫正,透视变换,OCR识别)

    人工智能学习离不开实践的验证,推荐大家可以多在FlyAI-AI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力.FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台.每周免费提供 ...

  4. opencv项目实战(2)——文档扫描OCR识别

    文章目录 思路 文档扫描 代码 运行结果 文字识别 预处理 代码 运行结果 Debug 记录 思路 STEP 1: 边缘检测 STEP 2: 获取轮廓 STEP 3: 变换 文档扫描 代码 scan. ...

  5. 计算机视觉-OpenCV(文档扫描OCR识别)

    一.边缘检测 二.获取轮廓 三.变换 四.OCR识别 import cv2 import numpy as np import argparse import pytesseract import o ...

  6. 项目实战——文档扫描OCR识别

    扫描全能王的实现,maybe 目录 一.文档扫描 1.引入所需要的库 2.图像的读取与预处理 读取图像 图像reszie, 图像灰度化.滤波.边缘检测. 3.轮廓检测 4.透视与二值变换 二.文字识别 ...

  7. 【实战】OpenCV+Python项目实战--文档扫描OCR识别

    文章目录 1 准备工作(python) 1.1 np.diff用法 1.2 tesseract和pytesseract安装 2代码实现 2.1 文档提取与摆正 2.2 OCR扫描 1 准备工作(pyt ...

  8. opencv项目实战(二)——文档扫描OCR识别

    一.项目描述 二.代码详解 2.1 预定义参数 2.2 辅助函数 2.3 文档矫正 2.4 文档识别 三.项目完整代码 一.项目描述 目的 将图片中的文档矫正,并识别文档内容 输入与输出 方法流程 核 ...

  9. 文档扫描OCR识别-1(python)

    工具包导入 import numpy as np import cv2 1 2 函数设定 # 四边形坐标求解 def order_points(pts): # 一共 4 个坐标点 rect = np. ...

  10. 文档扫描OCR识别_积累

    opecncv和python的积累 cv2.resize() 功能:对图像尺寸调整为指定大小 dst = cv2.resize(src, dsize, interpolation=None) 各参数释 ...

最新文章

  1. cnn handwrite使用原生的TensorFlow进行预测
  2. mysql ibatis 分页_MyBatis怎样实现MySQL动态分页?
  3. rfid在高速公路管理中的应用_RFID技术与ETC技术在弱电门禁系统中应用
  4. 【STM32】修改芯片型号后报 Error 的解决方案
  5. php android html字符串,实例讲解php将字符串输出到HTML
  6. 查询某个字段的记录是否包含中文或者是否是数字
  7. 发现kafka丢消息后的排查
  8. java 复制文本内容_基于java文本复制的7种方式总结
  9. mysql数据库中实现内连接、左连接、右连接
  10. 使用TortoiseGit提交代码到github上
  11. HFSS15.0新手村任务
  12. 转 疯狂代码 大型网站架构系列(未完待续)
  13. 处理debian7下Juk导入音乐乱码
  14. Xp计算机同步时间,windows xp时间不准不能自动同步的解决办法
  15. 记一次机房断电办公室网络瘫痪的恢复经过
  16. 云杰恒指:8.29恒指期货实盘交易复盘
  17. FAST迅捷路由器设置
  18. 天基实业投资理财需了解的基础知识
  19. linux 运行安卓游戏吗,桌面应用|在 Linux 上安装安卓 8.1 Oreo 来运行应用程序和游戏...
  20. ExpandableListView 去掉默认箭头,设置成别的图片

热门文章

  1. 蓝桥杯单片机——PCF8591 ADC/DAC模块
  2. hive学习(5)--- Partitions分区的使用(包括动态分区)
  3. 无人驾驶7:粒子滤波
  4. 关于PROE绘图个人记录
  5. 云防护600Gddos流量攻击完美解决
  6. 带分数乘整数怎么用计算机,整数乘以分数怎么算
  7. python用post提交数据_python通过post提交数据的方法
  8. 基于智铸超云模流平台,龙文元教授于特铸年会上作压铸技术报告
  9. python爬虫抓取百度图片_Python爬虫抓取百度的高清摄影图片
  10. 广和通5G模组FG650-CN、FM650-CN系列全线量产,加速5G超宽带应用高效落地