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 相关文章推荐
使用setup.py安装python包和卸载python包的方法
Nov 27 Python
在Python中调用ggplot的三种方法
Apr 08 Python
关于Python元祖,列表,字典,集合的比较
Jan 06 Python
Python 数据结构之旋转链表
Feb 25 Python
Python及PyCharm下载与安装教程
Nov 18 Python
详解Python locals()的陷阱
Mar 26 Python
使用python的turtle绘画滑稽脸实例
Nov 21 Python
django处理select下拉表单实例(从model到前端到post到form)
Mar 13 Python
Pytorch 使用不同版本的cuda的方法步骤
Apr 02 Python
解决IDEA 的 plugins 搜不到任何的插件问题
May 04 Python
解决PDF 转图片时丢文字的一种可能方式
Mar 04 Python
python通过函数名调用函数的几种方法总结
Jun 07 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字符转义相关函数小结(php下的转义字符串)
2007/04/12 PHP
PHP 获取文件路径(灵活应用__FILE__)
2013/02/15 PHP
php使用反射插入对象示例分享
2014/03/11 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
jQuery拖拽div实现思路
2014/02/19 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
关于javaScript注册click事件传递参数的不成功问题
2014/07/18 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
理解javascript对象继承
2016/04/17 Javascript
nodejs微信公众号支付开发
2016/09/19 NodeJs
jQuery代码实现实时获取时间
2017/01/29 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
jQuery异步提交表单实例
2017/05/30 jQuery
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
javascript ES6 新增了let命令使用介绍
2017/07/07 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
微信小程序移动拖拽视图-movable-view实例详解
2019/08/17 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
python实现手机通讯录搜索功能
2018/02/22 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
将pip源更换到国内镜像的详细步骤
2019/04/07 Python
三个python爬虫项目实例代码
2019/12/28 Python
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
银行会计财务工作个人的自我评价
2013/10/29 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
爱护公共设施的标语
2014/06/24 职场文书
2014年少先队工作总结
2014/12/03 职场文书
红色革命电影观后感
2015/06/18 职场文书
学校运动会简讯
2015/07/20 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL