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中使用PyHook监听鼠标和键盘事件实例
Jul 18 Python
使用python爬虫实现网络股票信息爬取的demo
Jan 05 Python
pandas全表查询定位某个值所在行列的方法
Apr 12 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
Mar 22 Python
使用Python实现文字转语音并生成wav文件的例子
Aug 08 Python
详解Python3 pandas.merge用法
Sep 05 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
Dec 19 Python
Python3 filecmp模块测试比较文件原理解析
Mar 23 Python
python实现将range()函数生成的数字存储在一个列表中
Apr 02 Python
TensorFlow的reshape操作 tf.reshape的实现
Apr 19 Python
Python中re模块的元字符使用小结
Apr 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
Cappuccino 卡布其诺咖啡之制作
2021/03/03 冲泡冲煮
菜鸟学PHP之Smarty入门
2007/01/04 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
js过滤HTML标签以及空格的思路及代码
2013/05/24 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
基于jQuery实现的文字按钮表单特效整理
2014/12/07 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
基于JavaScript实现Tab选项卡切换效果
2016/11/24 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
2017/12/27 Javascript
webpack4简单入门实例
2018/09/06 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
使用webpack编译es6代码的方法步骤
2019/04/28 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
layer弹出层显示在top顶层的方法
2019/09/11 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
Python中的localtime()方法使用详解
2015/05/22 Python
python组合无重复三位数的实例
2018/11/13 Python
python将视频转换为全字符视频
2019/04/26 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
我读书我快乐演讲稿
2014/05/07 职场文书
2015年施工员工作总结范文
2015/04/20 职场文书
读书笔记格式
2015/07/02 职场文书
大学生支教感言
2015/08/01 职场文书
Nginx解决403 forbidden的完整步骤
2021/04/01 Servers
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
java中如何截取字符串最后一位
2022/07/07 Java/Android