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对html代码进行escape编码的方法
May 04 Python
pandas 空的dataframe 插入列名的示例
Oct 30 Python
浅谈pycharm下找不到sqlalchemy的问题
Dec 03 Python
python统计中文字符数量的两种方法
Jan 31 Python
Python学习笔记之变量、自定义函数用法示例
May 28 Python
Python QQBot库的QQ聊天机器人
Jun 19 Python
浅谈Python小波分析库Pywavelets的一点使用心得
Jul 09 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
Nov 15 Python
Python 添加文件注释和函数注释操作
Aug 09 Python
Python实现播放和录制声音的功能
Aug 12 Python
python正则表达式re.match()匹配多个字符方法的实现
Jan 27 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
Feb 06 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版(3)
2006/10/09 PHP
elgg 获取文件图标地址的方法
2010/03/20 PHP
PHP编码转换
2012/11/05 PHP
Laravel 5框架学习之向视图传送数据
2015/04/08 PHP
php动态读取数据清除最右边距的方法
2017/04/12 PHP
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
2014/05/22 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
向JavaScript的数组中添加元素的方法小结
2015/10/24 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
jquery实现焦点轮播效果
2017/02/23 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
2018/12/09 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
学习python (1)
2006/10/31 Python
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
python安装Scrapy图文教程
2017/08/14 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
Python实现SMTP邮件发送
2020/06/16 Python
使用keras实现非线性回归(两种加激活函数的方式)
2020/07/05 Python
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
澳洲本土太阳镜品牌:Quay Australia
2019/07/29 全球购物
解决方案设计综合面试题
2015/08/31 面试题
大学校庆策划书
2014/01/31 职场文书
家长建议怎么写
2014/05/15 职场文书
继承权公证书范本
2015/01/23 职场文书
观看建国大业观后感
2015/06/01 职场文书
导游词之潮音寺
2019/09/26 职场文书
【HBU】数据库第四周 单表查询
2021/04/05 SQL Server
python对文档中元素删除,替换操作
2022/04/02 Python
Java实现简单小画板
2022/06/10 Java/Android