热门标签 | 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]
推荐阅读
  • Iamtryingtocreateanarrayofstructinstanceslikethis:我试图创建一个这样的struct实例数组:letinstallers: ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 如何使用Python从工程图图像中提取底部的方法?
    本文介绍了使用Python从工程图图像中提取底部的方法。首先将输入图片转换为灰度图像,并进行高斯模糊和阈值处理。然后通过填充潜在的轮廓以及使用轮廓逼近和矩形核进行过滤,去除非矩形轮廓。最后通过查找轮廓并使用轮廓近似、宽高比和轮廓区域进行过滤,隔离所需的底部轮廓,并使用Numpy切片提取底部模板部分。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
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社区 版权所有