如下小程序为使用python+opencv将表格图片,按照表格进行分割,并识别分割后的子图片中的文字,希望对需要的小伙伴有一些些帮助。具体的实现见如下代码。

# -*- coding: utf-8 -*-
"""
Created on Tue May 28 19:23:19 2019
将图片按照表格框线交叉点分割成子图片(传入图片路径)
@author: hx
"""import cv2
import numpy as np
import pytesseractimage = cv2.imread('C:/Users/Administrator/Desktop/7.jpg', 1)
#灰度图片
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#二值化
binary = cv2.adaptiveThreshold(~gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 35, -5)
#ret,binary = cv2.threshold(~gray, 127, 255, cv2.THRESH_BINARY)
cv2.imshow("二值化图片:", binary) #展示图片
cv2.waitKey(0)rows,cols=binary.shape
scale = 40
#识别横线
kernel  = cv2.getStructuringElement(cv2.MORPH_RECT,(cols//scale,1))
eroded = cv2.erode(binary,kernel,iterations = 1)
#cv2.imshow("Eroded Image",eroded)
dilatedcol = cv2.dilate(eroded,kernel,iterations = 1)
cv2.imshow("表格横线展示:",dilatedcol)
cv2.waitKey(0)#识别竖线
scale = 20
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(1,rows//scale))
eroded = cv2.erode(binary,kernel,iterations = 1)
dilatedrow = cv2.dilate(eroded,kernel,iterations = 1)
cv2.imshow("表格竖线展示:",dilatedrow)
cv2.waitKey(0)#标识交点
bitwiseAnd = cv2.bitwise_and(dilatedcol,dilatedrow)
cv2.imshow("表格交点展示:",bitwiseAnd)
cv2.waitKey(0)
# cv2.imwrite("my.png",bitwiseAnd) #将二值像素点生成图片保存#标识表格
merge = cv2.add(dilatedcol,dilatedrow)
cv2.imshow("表格整体展示:",merge)
cv2.waitKey(0)#两张图片进行减法运算,去掉表格框线
merge2 = cv2.subtract(binary,merge)
cv2.imshow("图片去掉表格框线展示:",merge2)
cv2.waitKey(0)#识别黑白图中的白色交叉点,将横纵坐标取出
ys,xs = np.where(bitwiseAnd>0)mylisty=[] #纵坐标
mylistx=[] #横坐标#通过排序,获取跳变的x和y的值,说明是交点,否则交点会有好多像素值值相近,我只取相近值的最后一点
#这个10的跳变不是固定的,根据不同的图片会有微调,基本上为单元格表格的高度(y坐标跳变)和长度(x坐标跳变)
i = 0
myxs=np.sort(xs)
for i in range(len(myxs)-1):if(myxs[i+1]-myxs[i]>10):mylistx.append(myxs[i])i=i+1
mylistx.append(myxs[i]) #要将最后一个点加入i = 0
myys=np.sort(ys)
#print(np.sort(ys))
for i in range(len(myys)-1):if(myys[i+1]-myys[i]>10):mylisty.append(myys[i])i=i+1
mylisty.append(myys[i]) #要将最后一个点加入print('mylisty',mylisty)
print('mylistx',mylistx)#循环y坐标,x坐标分割表格
for i in range(len(mylisty)-1):for j in range(len(mylistx)-1):#在分割时,第一个参数为y坐标,第二个参数为x坐标ROI = image[mylisty[i]+3:mylisty[i+1]-3,mylistx[j]:mylistx[j+1]-3] #减去3的原因是由于我缩小ROI范围cv2.imshow("分割后子图片展示:",ROI)cv2.waitKey(0)#special_char_list = '`~!@#$%^&*()-_=+[]{}|\\;:‘’,。《》/?ˇ'pytesseract.pytesseract.tesseract_cmd = 'E:/Tesseract-OCR/tesseract.exe'text1 = pytesseract.image_to_string(ROI)  #读取文字,此为默认英文#text2 = ''.join([char for char in text2 if char not in special_char_list])print('识别分割子图片信息为:'+text1)j=j+1i=i+1

喜欢我的文章希望和我一起成长的宝宝们,可以搜索并添加公众号TryTestwonderful ,或者扫描下方二维码添加公众号

python+opencv将表格图片按照表格框线分割、识别相关推荐

  1. 票据图片复杂表格框识别(票据单元格切割)

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 做票据OCR文字提取的时候,由于票据版面不固定,文字印刷错位.粘连等,想要提取目标内容非常困难 ...

  2. python opencv 如何给图片添加文字?cv2.putText() PIL

    参考文章1:python如何在图片上添加文字(中文和英文)Python在图片上添加文字的两种方法:OpenCV和PIL 参考文章2:python之------如何在图片上面添加文字(多种类型的文字)[ ...

  3. ppt表格框线的大小粗细设置

    仅作为记录,大佬请跳过. 选中表格--点击表设计--选中左侧的2.25磅--选择边框的所有框线,即可全部改成粗线条. 参考 感谢大佬博主文章:传送门

  4. Python OpenCV高速公路道路汽车车辆摄像头视频侦测检测识别统计数量

    Python OpenCV高速公路道路汽车车辆侦测检测识别统计数量 如需安装运行环境或远程调试,可加QQ905733049由专业技术人员远程协助! 运行结果如下: 运行主要代码如下: import c ...

  5. Python实现Excel表格图片下载-腾讯文档收集表下载Excel表格后下载图片

    代码目的 QQ腾讯文档收集表下载本地后变成Excel表格,可是腾讯文档内的图片变成了链接,为了不手动保存图片,所以写出以下代码来实现自动保存图片. 代码原理 准备工作: python编译器 pytho ...

  6. python opencv轻松去图片水印

    背景 最近有一个需要为图片去水印的需求,于是各种折腾开始. 背景了解图片标准 图片使用RGB编码,RGB色彩模式是工业界的一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相 ...

  7. Python+OpenCV批量给图片加噪声

    利用python和opencv批量给图像加噪声(椒盐噪声.高斯噪声.随机噪声) 导入头文件 import os import cv2 import numpy as np import random ...

  8. python opencv numpy旋转图片

    python旋转图片 背景 在图像处理中,有的时候会有对图片进行角度旋转的处理,尤其是在计算机视觉中对于图像扩充,旋转角度扩充图片是一种常见的处理.这种旋转图片的应用场景也比较多,比如用户上传图片是竖 ...

  9. Python+Opencv实现把图片转为视频

    1. 安装Opencv包 在Python命令行输入如下命令(如果你使用的Anaconda,直接进入Anaconda Prompt键入命令即可.如果你不知道Anaconda是什么,可以参考王树义老师的文 ...

最新文章

  1. 数据中台应该包含什么?
  2. 我的世界java存档怎么导入_我的世界:地图种子输入“skull”,真的会找到沙漠骷髅岛么?...
  3. [转]C#导出到EXCEL
  4. python爬取动态网页的内容
  5. PHP 入门 - 2.函数
  6. 向量表示 运动抛物线_流动的美丽函数——抛物线浅谈
  7. 【转】20个让Web Developer开发生涯更加轻松的工具
  8. python中config方法作用,python中ConfigParse模块的用法
  9. 在html中添加class,在HTML标识符的Class中加入Styles
  10. unity编辑器扩展_07(创建对话框,检测按钮的点击,点击按钮后提示信息,保存设置的数据,显示点击按钮后的处理的进度条信息)...
  11. 服务器显示器分辨率,屏幕分辨率修改
  12. Labview_QMH模板解析
  13. vivo手机便签扫描功能怎么识别图片文字转为电子文字
  14. 小米手机第三方卡刷软件_小米手机通用详细图形刷机教程(四): 刷入第三方系统...
  15. 深锐观察:科比已无法超越乔丹 湖人飞侠被谁打败
  16. F5 GTM DNS 知识点和实验 3 -加速dns解析
  17. ubuntu下执行sudo命令提示:xx is not in the sudoers file. This incident will be reported.
  18. Java笔记07——类和对象
  19. MMM配置文件及相关命令
  20. 清远通业(谁有 清远通业 请在跟帖中:(1) 留名 (2)留个电子邮件地址 (3)回答你分了几次红利)...

热门文章

  1. 【Word】获取SCI文献中高清EMF格式图片的方法
  2. C++OpenCV去除发票中红色的印章部分实战
  3. 【20221119】【每日一题】解数独
  4. markdown语法及公式编辑
  5. paypal pdt php 5.3,opencart经验分享-paypal的配置与PDT Token的获取 | SDT技术网
  6. 录音转文字软件有电脑版吗?推荐这几个音频转文字软件
  7. 企业微信小程序开发(行事历)
  8. c++之vector以及deque的一些思考,以及pop与push的具体实现
  9. Python数据分析箱线图
  10. node.js把前台传来的base64码转成图片存放