本实验的目的主要是实现诸如发票,pdf扫描成的图片,如何可以实现找到发票(这里都用发票指代了)外轮廓,把桌面等信息消除,直接将发票清晰摆正呈现,方便后续的OCR识别。 2.本次实验的重点在于预处理-找到外轮廓外接矩形-透视变换摆正图片,最终的OCR扫描可以参考我的博客【Python】图像文字识别:从图片中识别出文字(Pytesseract安装配置与使用),以前已经实现过,就不赘述。用百度API也可以,效果会更好,也已经实现。
原图太大,现需要resize: 灰度:
高斯:
!!!!这里需要注意Resize时候:!!!! resize图片时候比例不要用设置好的一个值,比如定好h是500,则:
这样可以,但是在后面轮廓划定,透视变化摆正图像时(如下面代码),会出现倾斜情况:
因此resize图片时候比例我们直接设置比例,不用ratio值:
后面透视变换摆正图像时候直接乘以1/fx即可(此处5倍):
重点是近似计算找轮廓!!! approx=cv2.approxPolyDP(c, 0.02* peri, True) # 检测出来的轮廓可能是离散的点,故因在此做近似计算,使其形成一个矩形。做精度控制,原始轮廓到近似轮廓的最大的距离,较小时可能为多边形;较大时可能为矩形。 这里的值如果太小,比如0.0002等,可能近似轮廓是多边形,不是矩形,因此选择0,02即可。 注意:对于findContours: cnts可能有几百个轮廓,里面的各种字都会被圈出来,一般外围轮廓是最大,所以直接进行排序,再从里面找,会更简单。
刚开始不知道,所有的在一起找,由于精度问题没太懂,就浪费了很多时间找外围轮廓。
上代码:
重点是:four_point_transform(resize_image, screenCnt.reshape(4, 2)) 这个函数导入包即可
代码:
这里需要注意:如果是在resize后的图上操作可能最终会出现摆正后图像也不清楚的状态,如下所示。 在resize图上对检测后轮廓进行透视变换:
因此我们需要对原图进行处理,前面说过,我们已经对原图进行resize时fx=0.2,fy=0.2,缩小了5倍,这里只需要(在原图上,后面对选中轮廓区域点进行乘以1/fx倍)即可: four_point_transform(original_image, screenCnt.reshape(4, 2)5)* 最终效果好,如下图。 在原图上对检测后轮廓进行透视变换: 原图完胜!!!ヽ(・ω・´メ)
十分简单,但pytesseract的安装可能会有各种问题,参照这篇博客即可。
效果也可,记得把原图右旋转一下再做。 原图: resize后的图:
找到轮廓:
结果: 在原图上做的透视变换:
效果还可!
本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com
本文链接:http://www.glev.cn/tnews/1593.html