表格内容识别(python-opencv)(一)【9/8】

本文介绍了一种使用Python和OpenCV进行已知特定表格的识别方法。首先通过横向和纵向的条形腐蚀膨胀获取表格框架,再对细线进行加粗处理。接着,通过透视变换摆正倾斜的表格,利用轮廓外接矩形和顶点排序确定变换矩阵。识别过程中,使用了cv2.approxPolyDP拟合四边形并调整epsilon值,确保四边形识别。项目包括预处理、识别和调整ROI区域等功能,主要难点在于手写数字识别和不同表格的大小调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

暑假都在弄这个,一开始以为是要弄一个通用的对表格进行分块和把内容全部识别,所以又分块又分行又把横线上的内容单独弄出来,后来说是对于已知的特定表格,所以最后都用python来写了,比较方便。在网上只找到一个比较巧妙的提取表格框架的方法,用横向和竖向的细长的条去腐蚀膨胀可以得到横线和竖线,拼在一起就是完整的表格框架,而且这样正好把一些小点和文字去除了。

 这样的话因为有些线太细,就检测所有轮廓再加粗一次,上图为加粗后的表格框架和找到的表格块(这图有点问题。。。好的找不到了)。但这个方法有个问题就是表格位置必须比较正,如果倾斜角度较大则不行。所以要先对表格进行透视变换后摆正。这里使用的方法是用上图找到的表格框架,找到表格的四个顶点,再和其轮廓的外接矩形的四个顶点得到变换矩阵。这里还有个问题,就四个顶点和变换后的四个顶点必须是对应的,所以要对四个顶点进行排序,怎么对矩形的四个顶点进行排序,在网上也找到了一个比较好的方法,就是将得到的四个顶点先按照y坐标分成上下A、B两部分,再对A部分按x坐标从小到大排序,对B部分按x坐标降序排序,这样四个点就能按照顺时针排列了,对于没有定位标识的表格,只要表格不是倒着摆放或者过分倾斜都可以正确变换。然后还有一个问题就是这是用外接矩形作为变换后的表格,这样不同的表格则变换后的大小不一样,所以最后都resize到一个固定大小。

因为图片的表格可能不是矩形,所以是用opencv的cv2.approxPolyDP,拟合表格的四边形,找轮廓cv2.findcontours时选择SIMPLE的方式,轮廓存储的就是顶点。拟合多边形时为了尽量拟合出来的是四边形为不是多于四条边,可以把epsilon的值设置的较大些,官网的方式是用cv2.arclength

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值