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实现探测socket和web服务示例
Mar 28 Python
Python自动发邮件脚本
Mar 31 Python
一个Python最简单的接口自动化框架
Jan 02 Python
Django 登陆验证码和中间件的实现
Aug 17 Python
python调用staf自动化框架的方法
Dec 26 Python
Python生成一个迭代器的实操方法
Jun 18 Python
python实现画循环圆
Nov 23 Python
Pycharm和Idea支持的vim插件的方法
Feb 21 Python
Python3 mmap内存映射文件示例解析
Mar 23 Python
基于Python的Jenkins的二次开发操作
May 12 Python
python中append函数用法讲解
Dec 11 Python
python中实现词云图的示例
Dec 19 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
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
深入理解javascript中return的作用
2013/12/30 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
js实现砖头在页面拖拉效果
2020/11/20 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
详解vue 组件之间使用eventbus传值
2017/10/25 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
python 处理dataframe中的时间字段方法
2018/04/10 Python
python实现人人自动回复、抢沙发功能
2018/06/08 Python
Flask框架使用DBUtils模块连接数据库操作示例
2018/07/20 Python
python利用ffmpeg进行录制屏幕的方法
2019/01/10 Python
django模板结构优化的方法
2019/02/28 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
django有哪些好处和优点
2020/09/01 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
德国价格合理的品牌商品购物网站:averdo
2019/03/21 全球购物
Internal修饰符有什么含义
2013/07/10 面试题
2014年社区学雷锋活动总结
2014/03/09 职场文书
党课培训心得体会
2014/09/02 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
雷峰塔导游词
2015/02/09 职场文书
客服专员岗位职责范本
2015/04/07 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
alibaba seata服务端具体实现
2022/02/24 Java/Android
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫
python使用BeautifulSoup 解析HTML
2022/04/24 Python