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爬虫_自动获取seebug的poc实例
Aug 05 Python
Python算法之图的遍历
Nov 16 Python
神经网络python源码分享
Dec 15 Python
python机器学习理论与实战(五)支持向量机
Jan 19 Python
python构建深度神经网络(续)
Mar 10 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
Jun 20 Python
python+selenium打印当前页面的titl和url方法
Jun 22 Python
Python Selenium 之关闭窗口close与quit的方法
Feb 13 Python
Python实现简单层次聚类算法以及可视化
Mar 18 Python
解决Django no such table: django_session的问题
Apr 07 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 Python
Python如何实现感知器的逻辑电路
Dec 25 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
杏林同学录(三)
2006/10/09 PHP
apache rewrite_module模块使用教程
2008/01/10 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
2013/04/26 PHP
php函数指定默认值方法的小例子
2013/12/04 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
2014/06/13 PHP
php实现的简单检验登陆类
2015/06/18 PHP
php类的定义与继承用法实例
2015/07/07 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
javascript中的new使用
2010/03/20 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
js+flash实现的5图变换效果广告代码(附演示与demo源码下载)
2016/04/01 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
Jquery-data的三种用法
2017/04/18 jQuery
jstree单选功能的实现方法
2017/06/07 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
vue中v-for通过动态绑定class实现触发效果
2018/12/06 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
国际贸易专业个人职业生涯规划
2014/02/15 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
2016年学生会感恩节活动总结
2016/04/01 职场文书
windows安装python超详细图文教程
2021/05/21 Python
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python
Win11安装受阻怎么办? Windows11安装问题与解决方案汇总
2021/11/21 数码科技