Opencv 图片的OCR识别的实战示例


Posted in Python onMarch 02, 2021

一、图片变换

0、导入模块

导入相关函数,遇到报错的话,直接pip install 函数名。

import numpy as np
import argparse
import cv2

参数初始化

ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required = True,
  help = "Path to the image to be scanned") 
args = vars(ap.parse_args())

Parameters:

--image images\page.jpg

1、重写resize函数

def resize(image, width=None, height=None, inter=cv2.INTER_AREA):
  dim = None
  (h, w) = image.shape[:2]
  if width is None and height is None:
   return image
  if width is None:
   r = height / float(h)
   dim = (int(w * r), height)
  else:
   r = width / float(w)
   dim = (width, int(h * r))
  resized = cv2.resize(image, dim, interpolation=inter)
  return resized

2、预处理

读取图片后进行重置大小,并计算缩放倍数;进行灰度化、高斯滤波以及Canny轮廓提取

image = cv2.imread(args["image"])
ratio = image.shape[0] / 500.0
orig = image.copy()
image = resize(orig, height = 500)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (5, 5), 0)
edged = cv2.Canny(gray, 75, 200)

3、边缘检测

检测轮廓并排序,遍历轮廓。

cnts = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[0]# 轮廓检测
cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:5]#保留前5个轮廓

# 遍历轮廓
for c in cnts:
  # 计算轮廓近似
  peri = cv2.arcLength(c, True)# 计算轮廓长度,C表示输入的点集,True表示轮廓是封闭的
  #(C表示输入的点集,epslion判断点到相对应的line segment 的距离的阈值,曲线是否闭合的标志位)
  approx = cv2.approxPolyDP(c, 0.02 * peri, True)

  # 4个点的时候就拿出来
  if len(approx) == 4:
   screenCnt = approx
   break

4、透视变换

画出近似轮廓,透视变换,二值处理

cv2.drawContours(image, [screenCnt], -1, (0, 255, 0), 2)
warped = four_point_transform(orig, screenCnt.reshape(4, 2) * ratio)#透视变换

# 二值处理
warped = cv2.cvtColor(warped, cv2.COLOR_BGR2GRAY)
ref = cv2.threshold(warped, 100, 255, cv2.THRESH_BINARY)[1]
cv2.imwrite('scan.jpg', ref)

二、OCR识别

0、安装tesseract-ocr

链接: 下载

在环境变量、系统变量的Path里面添加安装路径,例如:E:\Program Files (x86)\Tesseract-OCR

tesseract -v#打开命令行,进行测试
tesseract XXX.png result#得到结果 
pip install pytesseract#安装依赖包

打开python安装路径里面的python文件,例如C:\ProgramData\Anaconda3\Lib\site-packages\pytesseract\pytesseract.py
将tesseract_cmd 修改为绝对路径即可,例如:tesseract_cmd = ‘C:/Program Files (x86)/Tesseract-OCR/tesseract.exe'

1、导入模块

from PIL import Image
import pytesseract
import cv2
import os

2、预处理

读取图片、灰度化、滤波

image = cv2.imread('scan.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.medianBlur(gray, 3)

3、输出结果

filename = "{}.png".format(os.getpid())
cv2.imwrite(filename, gray)  
text = pytesseract.image_to_string(Image.open(filename))
print(text)
os.remove(filename)

到此这篇关于Opencv 图片的OCR识别的实战示例的文章就介绍到这了,更多相关Opencv 图片的OCR识别内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python在windows下实现ping操作并接收返回信息的方法
Mar 20 Python
python编码总结(编码类型、格式、转码)
Jul 01 Python
python 显示数组全部元素的方法
Apr 19 Python
python字典的常用方法总结
Jul 31 Python
python实现美团订单推送到测试环境,提供便利操作示例
Aug 09 Python
Python CSV文件模块的使用案例分析
Dec 21 Python
Python+OpenCV实现图像的全景拼接
Mar 05 Python
Python实现aes加密解密多种方法解析
May 15 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
Jun 30 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 Python
基于Python的图像阈值化分割(迭代法)
Nov 20 Python
Python数据结构之队列详解
Mar 21 Python
python实现控制台输出颜色
Mar 02 #Python
python 如何在测试中使用 Mock
Mar 01 #Python
python装饰器代码深入讲解
Mar 01 #Python
Pytorch如何切换 cpu和gpu的使用详解
Mar 01 #Python
python爬取股票最新数据并用excel绘制树状图的示例
Mar 01 #Python
python中openpyxl和xlsxwriter对Excel的操作方法
Mar 01 #Python
python中random模块详解
Mar 01 #Python
You might like
几种显示数据的方法的比较
2006/10/09 PHP
PHP return语句另类用法不止是在函数中
2014/09/17 PHP
解决Laravel5.2 Auth认证退出失效的问题
2019/10/14 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
JSON辅助格式化处理方法
2013/03/26 Javascript
JavaScript中的style.display属性操作
2013/03/27 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
老生常谈js-react组件生命周期
2017/05/02 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
Node.js assert断言原理与用法分析
2019/01/04 Javascript
原生JS实现拖拽效果
2020/12/04 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
python的类方法和静态方法
2014/12/13 Python
Python Socket使用实例
2017/12/18 Python
Python+PIL实现支付宝AR红包
2018/02/09 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
django中模板的html自动转意方法
2018/05/27 Python
深入理解Django自定义信号(signals)
2018/10/15 Python
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
详解python:time模块用法
2019/03/25 Python
python线程定时器Timer实现原理解析
2019/11/30 Python
python3实现绘制二维点图
2019/12/04 Python
基于FME使用Python过程图解
2020/05/13 Python
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
数据库的约束含义
2012/09/09 面试题
医学生自我鉴定范文
2013/11/08 职场文书
党的群众路线教育实践方案
2014/05/11 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
2014年银行员工工作总结
2014/11/12 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
宣传委员竞选稿
2015/11/19 职场文书
安全生产学习心得体会
2016/01/18 职场文书
Python办公自动化之Excel(中)
2021/05/24 Python
python 管理系统实现mysql交互的示例代码
2021/12/06 Python