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中lambda的用法及其与def的区别解析
Jul 28 Python
Python中实现两个字典(dict)合并的方法
Sep 23 Python
python获取android设备的GPS信息脚本分享
Mar 06 Python
python中尾递归用法实例详解
Apr 28 Python
用Python的Flask框架结合MySQL写一个内存监控程序
Nov 07 Python
Python 实现 贪吃蛇大作战 代码分享
Sep 07 Python
Python中字典和集合学习小结
Jul 07 Python
Django 中间键和上下文处理器的使用
Mar 17 Python
Python之pymysql的使用小结
Jul 01 Python
Python在后台自动解压各种压缩文件的实现方法
Nov 10 Python
python 第三方库paramiko的常用方式
Feb 20 Python
Python编程编写完善的命令行工具
Sep 15 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数据流应用的简单例子
2012/06/01 PHP
php header功能的使用
2013/10/28 PHP
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
PHP生成数组再传给js的方法
2014/08/07 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
仿163填写邮件地址自动显示下拉(无优化)
2008/11/05 Javascript
javascript 数组排序函数
2009/08/20 Javascript
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
2015/03/18 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
jQuery+CSS3实现点赞功能
2017/03/13 Javascript
nodejs开发——express路由与中间件
2017/03/24 NodeJs
详谈js模块化规范
2017/07/07 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
Node+OCR实现图像文字识别功能
2018/11/26 Javascript
JS实现移动端在线签协议功能
2019/08/22 Javascript
微信小程序引入VANT组件的方法步骤
2019/09/19 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
python计算方程式根的方法
2015/05/07 Python
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
在python里面运用多继承方法详解
2019/07/01 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
西安夏日科技有限公司Java笔试题
2013/01/11 面试题
奶茶店创业计划书范文
2014/01/17 职场文书
酒店销售经理岗位职责
2014/01/31 职场文书
网站客服岗位职责
2014/04/05 职场文书
销售内勤岗位职责
2014/04/15 职场文书
加薪申请报告范本
2015/05/15 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
100句拼搏进取的名言警句,值得一读!
2019/10/07 职场文书
Python自动化之批量处理工作簿和工作表
2021/06/03 Python
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python