Opencv 图片的OCR识别的实战示例

 更新时间:2021年03月02日 08:34:41   作者:Star-Chan  
这篇文章主要介绍了Opencv 图片的OCR识别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、图片变换

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 Django教程之模板的使用

    Python Django教程之模板的使用

    模板是 Django MVT 结构的第三个也是最重要的部分。Django中的模板基本上是用HTML,CSS和Javascript编写在.html文件中的。本文将通过实例详细聊聊Django模板的使用,感兴趣的可以
    2022-10-10
  • PyCharm自动化测试的实现

    PyCharm自动化测试的实现

    本文主要介绍了PyCharm自动化测试的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • Python 列表(List) 的三种遍历方法实例 详解

    Python 列表(List) 的三种遍历方法实例 详解

    这篇文章主要介绍了Python 列表(List) 的三种遍历方法实例 详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • pandas的resample重采样的使用

    pandas的resample重采样的使用

    这篇文章主要介绍了pandas的resample重采样的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 在Apache服务器上同时运行多个Django程序的方法

    在Apache服务器上同时运行多个Django程序的方法

    这篇文章主要介绍了在Apache服务器上同时运行多个Django程序的方法,Django是Python各色高人气web框架中最为著名的一个,需要的朋友可以参考下
    2015-07-07
  • Python如何实现在字符串里嵌入双引号或者单引号

    Python如何实现在字符串里嵌入双引号或者单引号

    今天小编就为大家分享一篇Python如何实现在字符串里嵌入双引号或者单引号,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python中闭包与lambda的作用域解析

    Python中闭包与lambda的作用域解析

    这篇文章主要介绍了Python中闭包与lambda的作用域解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 如何使用Python在excel中创建柱状图

    如何使用Python在excel中创建柱状图

    这篇文章主要给大家介绍了关于如何使用Python在excel中创建柱状图的相关资料,包括导入模块、新建工作簿、创建图表、设置数据范围、添加标题和数据系列、以及保存图表和工作簿,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • Pycharm编辑器技巧之自动导入模块详解

    Pycharm编辑器技巧之自动导入模块详解

    我们在编程过程中经常会不经意的使用到一些尚未导入的类和模块,在这种情况下Pycharm会帮助我们定位模块文件位置并将其添加到导入列表中,这也就是所谓的自动导入模块功能。本文给大家介绍了关于Pycharm编辑器技巧之自动导入模块的相关资料,需要的朋友可以参考下。
    2017-07-07
  • 利用Python将图片中扭曲矩形的复原

    利用Python将图片中扭曲矩形的复原

    这篇文章主要给大家介绍了关于如何利用Python将图片中扭曲矩形复原的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论