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修改注册表终止360进程实例
Oct 13 Python
Python Web编程之WSGI协议简介
Jul 18 Python
python快速编写单行注释多行注释的方法
Jul 31 Python
解析python的局部变量和全局变量
Aug 15 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
Oct 01 Python
Python数据可视化:饼状图的实例讲解
Dec 07 Python
如何在django中添加日志功能
Feb 06 Python
IDLE下Python文件编辑和运行操作
Apr 25 Python
详解Python高阶函数
Aug 15 Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 Python
Python打包exe时各种异常处理方案总结
May 18 Python
opencv 分类白天与夜景视频的方法
Jun 05 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
在mysql数据库原有字段后增加新内容
2009/11/26 PHP
php魔术函数__call()用法实例分析
2015/02/13 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
event.srcElement+表格应用
2006/08/29 Javascript
学习ExtJS border布局
2009/10/08 Javascript
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
JavaScript清空数组元素的两种方法简单比较
2015/07/10 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
原生js实现新闻列表展开/收起全文功能
2017/01/20 Javascript
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
vue实现放大镜效果
2020/09/17 Javascript
从零学python系列之从文件读取和保存数据
2014/05/23 Python
Python复制目录结构脚本代码分享
2015/03/06 Python
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
Python实现SMTP发送邮件详细教程
2021/03/02 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
《新型玻璃》教学反思
2014/04/13 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB
python中 Flask Web 表单的使用方法
2022/05/20 Python
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript