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 Sleep休眠函数使用简单实例
Feb 02 Python
听歌识曲--用python实现一个音乐检索器的功能
Nov 15 Python
Python 查找list中的某个元素的所有的下标方法
Jun 27 Python
Python单向链表和双向链表原理与用法实例详解
Aug 31 Python
Python实现批量执行同目录下的py文件方法
Jan 11 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
Mar 20 Python
Python这样操作能存储100多万行的xlsx文件
Apr 16 Python
python日期相关操作实例小结
Jun 24 Python
pytorch 常用线性函数详解
Jan 15 Python
实现Python3数组旋转的3种算法实例
Sep 16 Python
Python Selenium操作Cookie的实例方法
Feb 28 Python
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
Apr 05 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面向对象全攻略 (三)特殊的引用“$this”的使用
2009/09/30 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
PHP加密解密类实例代码
2016/07/20 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
Jquery css函数用法(判断标签是否拥有某属性)
2011/05/28 Javascript
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
2012/12/27 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
开源的javascript项目Kissy介绍
2014/11/28 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
node.js中的fs.futimes方法使用说明
2014/12/17 Javascript
轻松创建nodejs服务器(6):作出响应
2014/12/18 NodeJs
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
Vue导出页面为PDF格式的实现思路
2018/07/31 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
详细分析vue表单数据的绑定
2020/07/20 Javascript
基于postman获取动态数据过程详解
2020/09/08 Javascript
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
python 提取文件指定列的方法示例
2019/08/07 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
python实现简单的购物程序代码实例
2020/03/03 Python
python 检测图片是否有马赛克
2020/12/01 Python
前台文员个人求职信范文
2014/01/05 职场文书
通信研究生自荐信
2014/02/01 职场文书
毕业生自荐书
2014/02/02 职场文书
yy司仪主持词
2014/03/22 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
擅自离岗检讨书
2014/09/12 职场文书
小学英语教学经验交流材料
2015/11/02 职场文书
使用numpy nonzero 找出非0元素
2021/05/14 Python