OpenCV&OCR简单识别图片表格数据
在很多时候,我们的数据来源形式是多种多样的,有时候数据(或表格)也会呈现在图片中。那么,我们如何来获取图片中的有用数据呢?当一张图片中含有表格数据的时候,我们可以用OpenCV识别表格中的直线,然后再用OCR技术识别其中的文字。 本文仅作为如何识别图片中的表格的一个例子,希望能给读者一些启示。笔者用到的工具如下: opencv pyteressact numpy 我们用opencv来识别表格中的直线,用pyteressact来识别单元格文字,用numpy做数值处理。我们要识别的示例图片(AI.png)如下: 示例图片 AI.png 我们分以下几步进行识别: 识别表格中的横线,即分割记录(每一行)的横线; 识别表格中的竖线,即每个列的分割线; 找到数据所在的单元格; 利用pyteressact识别单元格的文字。 识别表格中的横线 识别横线之前,我们先创建一个图片表格识别类(ImageTableOCR),如下: # -*- coding: utf-8 -*-import cv2import pytesseractimport numpy as npclass ImageTableOCR(object): # 初始化 def __init__(self, ImagePath): # 读取图片 self.image = cv2.imread(ImagePath, 1) # 把图片转换为灰度模式 self.gray = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY) 其中self.image为RGB模块的图片,self.gray为灰度模式的图片。 接下来,我们识别图片中的分割两条记录的横线。注意到,相邻两条记录之间的颜色是不一致的,因此,我们利用图片灰度化后,每一行像素的平均值的差的绝对值来作为相邻两条记录的分割线,这样就能检测出分割两条记录的横线了。具体的识别横线的函数的Python代码如下:(接以上代码) # 横向直线检测 def HorizontalLineDetect(self): # 图像二值化 ret, thresh1 = cv2.threshold(self.gray, …