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实现从ftp服务器下载文件的方法
Apr 30 Python
python自动12306抢票软件实现代码
Feb 24 Python
Python基于opencv的图像压缩算法实例分析
May 03 Python
python实现根据指定字符截取对应的行的内容方法
Oct 23 Python
Python装饰器简单用法实例小结
Dec 03 Python
Django Rest framework之认证的实现代码
Dec 17 Python
python将视频转换为全字符视频
Apr 26 Python
django框架cookie和session用法实例详解
Dec 10 Python
Python实现从N个数中找到最大的K个数
Apr 02 Python
jupyter notebook 增加kernel教程
Apr 10 Python
Python如何优雅删除字符列表空字符及None元素
Jun 25 Python
用 python 进行微信好友信息分析
Nov 28 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中的函数-- foreach()的用法详解
2013/06/24 PHP
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
2017/06/02 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
深入认识JavaScript中的函数
2007/01/22 Javascript
Javascript对象中关于setTimeout和setInterval的this介绍
2012/07/21 Javascript
jquery限制输入字数,并提示剩余字数实现代码
2012/12/24 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
js data日期初始化的5种方法
2013/12/29 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
python uuid模块使用实例
2015/04/08 Python
Django接受前端数据的几种方法总结
2016/11/04 Python
Python中import机制详解
2017/11/14 Python
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
Python发展简史 Python来历
2019/05/14 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
2020/07/07 Python
django rest framework 自定义返回方式
2020/07/12 Python
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
美国专业级皮肤病和spa品质护肤品的高级零售网站:SkinCareRx
2017/02/06 全球购物
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
办理生育手续介绍信
2014/01/14 职场文书
电气自动化专业职业规划范文
2014/02/16 职场文书
公司财务流程之主管工作流程
2014/03/03 职场文书
应届生找工作求职信
2014/06/24 职场文书
不遵守课堂纪律的检讨书
2014/09/24 职场文书
店长岗位职责
2015/02/11 职场文书
运动会宣传稿100字
2015/07/23 职场文书
Nginx 根据URL带的参数转发的实现
2021/04/01 Servers
Python实现双向链表
2022/05/25 Python