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 字符串split的用法分享
Mar 23 Python
重命名批处理python脚本
Apr 05 Python
Python调用C语言开发的共享库方法实例
Mar 18 Python
使用Python编写一个简单的tic-tac-toe游戏的教程
Apr 16 Python
Python基础中所出现的异常报错总结
Nov 19 Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 Python
Python selenium实现微博自动登录的示例代码
May 16 Python
在Python中如何传递任意数量的实参的示例代码
Mar 21 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
pytorch中nn.Conv1d的用法详解
Dec 31 Python
matplotlib实现数据实时刷新的示例代码
Jan 05 Python
python实现计算图形面积
Feb 22 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
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
2014/08/23 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
vue-resource 拦截器(interceptor)的使用详解
2017/07/04 Javascript
安装vue-cli的简易过程
2018/05/22 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
jQuery实现二级导航菜单的示例
2020/09/30 jQuery
antd table按表格里的日期去排序操作
2020/11/17 Javascript
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
python实现将html表格转换成CSV文件的方法
2015/06/28 Python
Python Django使用forms来实现评论功能
2016/08/17 Python
浅析python中while循环和for循环
2019/11/19 Python
python实现批量处理将图片粘贴到另一张图片上并保存
2019/12/12 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
Python unittest单元测试框架实现参数化
2020/04/29 Python
Django nginx配置实现过程详解
2020/09/10 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
Html5适配iphoneX刘海屏的简单实现
2019/04/09 HTML / CSS
荷兰优雅女装网上商店:Heine
2016/11/14 全球购物
自考毕业生自我鉴定
2013/11/04 职场文书
应届毕业生个人求职信范文
2014/01/29 职场文书
舞蹈毕业生的自我评价
2014/03/05 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
2015年政协委员工作总结
2015/05/20 职场文书
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
详解Laravel服务容器的优势
2021/05/29 PHP