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中判断文件编码的chardet(实例讲解)
Dec 21 Python
Python socket实现简单聊天室
Apr 01 Python
python调用tcpdump抓包过滤的方法
Jul 18 Python
基于python3实现socket文件传输和校验
Jul 28 Python
cProfile Python性能分析工具使用详解
Jul 22 Python
python序列化与数据持久化实例详解
Dec 20 Python
opencv python如何实现图像二值化
Feb 03 Python
深入浅析python变量加逗号,的含义
Feb 22 Python
jupyter notebook中新建cell的方法与快捷键操作
Apr 22 Python
Python绘制动态水球图过程详解
Jun 03 Python
基于Python pyecharts实现多种图例代码解析
Aug 10 Python
python 匿名函数与三元运算学习笔记
Oct 23 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
在同一窗体中使用PHP来处理多个提交任务
2008/05/08 PHP
php下目前为目最全的CURL中文说明
2010/08/01 PHP
PHP代码审核的详细介绍
2013/06/13 PHP
thinkphp中session和cookie无效的解决方法
2014/12/19 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
JQuery UI的拖拽功能实现方法小结
2012/03/14 Javascript
js substr支持中文截取函数代码(中文是双字节)
2013/04/17 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
jQuery实现当前页面标签高亮显示的方法
2015/03/10 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
基于JavaScript实现移动端无限加载分页
2017/03/27 Javascript
nodejs对express中next函数的一些理解
2017/09/08 NodeJs
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
vue生命周期的探索
2019/04/03 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
基于JS实现简单滑块拼图游戏
2019/10/12 Javascript
vue@cli3项目模板怎么使用public目录下的静态文件
2020/07/07 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
Python 字符串大小写转换的简单实例
2017/01/21 Python
Python 列表理解及使用方法
2017/10/27 Python
python队列queue模块详解
2018/04/27 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
系统管理员的职责包括那些?管理的对象是什么?
2016/09/20 面试题
大学计划书范文800字
2014/08/14 职场文书
婚礼证婚人演讲稿
2014/09/13 职场文书
2015年乡镇信访工作总结
2015/04/07 职场文书