思路:我们拿到一张图片不是直接就识别的,而是做一些处理,去除我们不需要的信息,保留我们所需要的信息,再做识别。
通常要做的是对图片进行灰度化处理,再进行滤波,形态学等等去除掉不要的信息。
因为在处理的过程中,我们要对每一步处理后的图片进行查看分析,我们要显示很多次图片,因此我们可以把显示图片的功能封装成一个函数形式来使用:
我们在拿到一张图片的时候,有时候图片的大小不好处理,比如我们这次处理的图片的大小为3264×2448。我们先对尺寸大小进行处理。
可以将修改尺寸的功能封装成一个函数:
我们修改成高度为500的大小处理图片:
参考文章: OpenCV学习笔记8-滤波器原理及代码实现
为后续Canny检测服务:
参考文章: OpenCV学习笔记8-滤波器原理及代码实现
我们采用Canny找出信息的边缘,为后续查找轮廓做准备:
参考文章: OpenCV学习笔记10-图像轮廓的相关知识及代码实现
找到轮廓后,我们排序一下,为后面的透视变换和绘制轮廓做准备:
参考文章: OpenCV学习笔记10-图像轮廓的相关知识及代码实现
注意绘制轮廓会对原图片进行绘制,我们copy一份:
参考文章: OpenCV学习笔记10-图像轮廓的相关知识及代码实现
绘制轮廓的方法有可能使得轮廓线粗糙且不平滑,我们用多边形逼近的方法去得到平滑的轮廓,只保留最有用的信息,注意也要对copy的图片进行处理。近似完后,只剩下四个顶点的角的坐标,因此下面的len(approx)=4
参考文章: OpenCV学习笔记7-图像的基本变换(附代码实现)
我们对图片进行完预处理后,得到的近似轮廓,因为我们只想处理最有用的信息,其他周围没有用的背景给它去掉,因此我们用仿射变换使得图像变正。
透视变换要找到变换矩阵,因为多边形逼近后只留下四个顶点的坐标,因此我们需要找到原图的四个坐标和仿射变换后的四个坐标。
现在已经找到了原图的4个点的坐标。需要知道变换后的4个坐标,因此我们可以对原图的四个坐标按照角点顺时针或者逆时针排序,封装成一个函数:
找到了原图的四个角点的坐标后,计算点与点的距离,得到新的坐标,然后进行仿射变换,我们把仿射变换功能封装成一个函数:
调用仿射变换的函数:
进项仿射变换的时候,我们需要将之前的大小还原回来:
拉正之后,我们通过二值化处理进行过滤信息,得到有用的信息,方便ocr的扫描和提取:
将处理好的文件保存下来
我们需要导入pytesseract的工具包,进行扫描文字:
我们先打开cmd下载一下:
出现这个情况不要紧,我们修改一下下载路径:
具体可以查看我的这个文章: 已解决:Requirement already satisfied:xxx
pytesseract要求的image不是opencv读进来的image, 而是pillow这个包, 即PIL
所以我们要传入pillow包的图片!
页面分隔模式+OCR引擎模式可以看看我这篇文章: OpenCV学习笔记11-Tesseract-OCR的安装和使用
我们可以在保存的目录下看到已保存的scan和output
查看识别结果:
eee ek RK KOK KOR KOK
WHOLE FOODS MARKET - WESTPORT,CT 06880 399 POST RD WEST - (203) 227-6858
365 365 365 365
uexH TAX
BACON LS BACON LS BACON LS BACON LS
BROTH CHIC FLOUR ALMOND
CHKN BRST BNLSS SK HEAVY CREAM BALSMC REDUCT
BEEF GRND 85/15 JUICE COF CASHEW C
.00
DOCS PINT ORGANIC HNY ALMOND BUTTER
BAL
NP NP NP NP NP NP NP NP NP NP NP NP NP
4.99 4.99 4.99 4.99 2.19 11.99 18.80 3.39 6.49 5.04 8.99 194.49 9.99 101.33
ae Mees es ieee i en
呃呃呃呃呃,好像识别结果准确率不高,但是大部分还是识别出来了。
完整代码:
附OpenCV目录:OpenCV总目录学习笔记
本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:975644476@qq.com
本文链接:http://www.gawce.com/tnews/1759.html