热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

画图工具的拉伸和扭曲,PC能识别表格的ocr软件

表格的扭曲矫正在通过ocr对表格中的图像进行识别的时候发现,表格图像的定位是很重要的.虽然通过hough找直线,设低阈值,可以较高鲁棒性的找出表格的横线,但是表格如果存在一定程度的


研究表明,在用ocr识别表格图像时,表格图像的位置校正很重要。 通过在hough中查找直线并将阈值设定得较低,可以更鲁棒地发现表的横线,但如果表存在一定程度的失真,检测切取的效果就差。 从几篇论文来看,基于函数或摄像机视角的校正确实是有效的,但在目前基于表的应用中,越简单越好


以上是矫正的效果图.想法很简单,


用交叉模板匹配表的交点,过滤在hough中找到的直线的相对位置上不一致的交点。 按列按行排列与交点的排列顺序,通过交点的平均,找到标准网格,交点的配置位置遍历网格,以网格为单位进行从原图像到标准图像的映射变换


代码


class Choose: #十字获取,表格交点坐标点defdetectcross(self,imgt,hsize,wsize,thr=0.65 )十字中心midh,midw=hsize //2,wsize wsize] ) template [ midh-13360 mid H2, ]=255 template ) 3360,midw-1: mid w2 ]=255 match _ RES=cv2.match teted CV2.TM_ccorr_normed(#根据阈值,顶点index=NP.where(match_RESthr ) points=[] for y,xinzip ) index(0), index ) )的返回点#表格子点坐标点defgetnetpoints(self,img ) : ah, 获取aw=img.shape ) : ah ) img=NP.array ) img ) cv2.color _ RGB2gray (kernel=cv2.getstructuringelement 10 ) ) imgt=cv2.erode ) ) imgg iteratiOns=1(imgt=cv2.dilate ) imgt,kernel,iteratiOns=1) ret,_=cv2.tilate cv2.threshold imgt=cv2.threshold (imgt,ret * 1.2,255, cv2.THRESH_BINARY_INV ) #showimage(imgt ) )根据阈值大小和十字图像模板的纵横,查找和查找对应点5 ) : # points=self.deted xinpoints3360#cv2.cirray 1) showimage(imgx,str ) size ) points=self.detectcross ) imgt,40,45, 0.65 )获取表单点#self.drawpoints ) img的points ) mask=NP.zeros (imgt.shape [ :2 ] ) for y,x in points 3360 mask needw=self.finddetaiii表格准则warr=sorted(list(set(NP.Array ) Needw.Flatten () ) ) for w in warr: sw SW:ew )1#保留适当的点纵向排列的点needs_points=[] for y,x in points: if mask[

y, x] >= 2: needs_points.append([y, x]) # self.drawPoints(img, needs_points) # for h1, h2 in needh: # for w1, w2 in needw: # cv2.rectangle(img, (w1, h1), (w2, h2), (0, 0, 255), 2) # showImage(img) # 按照先列后行的顺序,进行网格排序 needs_points = np.array(needs_points) col_scale = [] mg = 8 col_scale.append([needw[0][0] - mg, needw[0][0] + mg]) for i in range(1, len(needw)): front, cur = needw[i - 1], needw[i] col_scale.append([front[1] - mg, cur[0] + mg]) gridx = [] tmppoints = np.array(needs_points)[:, 0].flatten() minv, maxv = tmppoints.min(), tmppoints.max() scale = (maxv - minv) // len(needh) # print(scale, minv, maxv, len(needh)) # idx = 0 for s, e in col_scale: # 过滤不在范围内的,按照列行,排列,与标准线最近的点 where = np.where((needs_points[:, 1] > s) & (needs_points[:, 1]
推荐阅读
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • 探索聚类分析中的K-Means与DBSCAN算法及其应用
    聚类分析是一种用于解决样本或特征分类问题的统计分析方法,也是数据挖掘领域的重要算法之一。本文主要探讨了K-Means和DBSCAN两种聚类算法的原理及其应用场景。K-Means算法通过迭代优化簇中心来实现数据点的划分,适用于球形分布的数据集;而DBSCAN算法则基于密度进行聚类,能够有效识别任意形状的簇,并且对噪声数据具有较好的鲁棒性。通过对这两种算法的对比分析,本文旨在为实际应用中选择合适的聚类方法提供参考。 ... [详细]
  • 如何在Spark数据排序过程中有效避免内存溢出(OOM)问题
    本文深入探讨了在使用Spark进行数据排序时如何有效预防内存溢出(OOM)问题。通过具体的代码示例,详细阐述了优化策略和技术手段,为读者在实际工作中遇到类似问题提供了宝贵的参考和指导。 ... [详细]
  • C#编程指南:实现列表与WPF数据网格的高效绑定方法 ... [详细]
  • 在单个图表中实现饼图与条形图的精准对齐 ... [详细]
  • 本文深入探讨了 C# 中 `SqlCommand` 和 `SqlDataAdapter` 的核心差异及其应用场景。`SqlCommand` 主要用于执行单一的 SQL 命令,并通过 `DataReader` 获取结果,具有较高的执行效率,但灵活性较低。相比之下,`SqlDataAdapter` 则适用于复杂的数据操作,通过 `DataSet` 提供了更多的数据处理功能,如数据填充、更新和批量操作,更适合需要频繁数据交互的场景。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 在处理大规模数据数组时,优化分页组件对于提高页面加载速度和用户体验至关重要。本文探讨了如何通过高效的分页策略,减少数据渲染的负担,提升应用性能。具体方法包括懒加载、虚拟滚动和数据预取等技术,这些技术能够显著降低内存占用和提升响应速度。通过实际案例分析,展示了这些优化措施的有效性和可行性。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
author-avatar
美晶婚纱-璐璐_723
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有