深入学习OpenCV文档扫描及OCR识别(文档扫描,图像矫正,透视变换,OCR识别)

如果需要处理的原图及代码,请移步小编的GitHub地址

  传送门:请点击我

  如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice

  下面准备学习如何对文档扫描摆正及其OCR识别的案例,主要想法是对一张不规则的文档进行矫正,然后通过tesseract进行OCR文字识别,最后返回结果。下面进入正文:

  现代生活中,手机像素比较高,所以大家拍这些照片都很随意,随便拍,比如下面的照片,如发票,文本等等:

深入学习OpenCV文档扫描及OCR识别(文档扫描,图像矫正,透视变换,OCR识别)

深入学习OpenCV文档扫描及OCR识别(文档扫描,图像矫正,透视变换,OCR识别)

   对于这些图像矫正的问题,在图像处理领域还真的很多,比如文本的矫正,车牌的矫正,身份证的矫正等等。这些都是因为拍摄者拍照随意,这就要求我们通过后期的图像处理技术将图片还原好,才能进行下一步处理,比如数字分割,数字识别,字母识别,文字识别等等。

  上面的问题,我们在日常生活中遇到的可不少,因为拍摄时拍的不好,导致拍出来的图片歪歪扭扭的,很不自然,那么我们如何将图片矫正过来呢?

  总的来说,要进行图像矫正,至少需要以下几步:

1,文档的轮廓提取技术

2,原始与变换坐标的计算

3,通过透视变换获取目标区域

  本文通过两个案例,一个是菜单矫正及OCR识别;另一个是答题卡矫正及OCR识别。

1,如何扫描菜单并获取菜单内容

  下面以菜单为例,慢慢剖析如何实现图像矫正,并获取菜单内容。

深入学习OpenCV文档扫描及OCR识别(文档扫描,图像矫正,透视变换,OCR识别)

   上面的斜着的菜单,如何扫描到如右图所示的照片呢?其实步骤有以下几步:

1,探测边缘

2,提取菜单矩阵轮廓四点进行透视变换

3,应用一个透视的转换去获取一个文档的自顶向下的正图

  知道步骤后,我们开始做吧!

1.1,文档轮廓提取

  我们拿到图像之后,首先进行边缘检测,其中预处理包括对噪音进行高斯模糊,然后进行边缘检测(这里采用了Canny算子提取特征),下面我们可以看一下边缘检测的代码与结果:

  代码:

def edge_detection(img_path): # 读取输入 img = cv2.imread(img_path) # 坐标也会相同变换 ratio = img.shape[0] / 500.0 orig = img.copy() image = resize(orig, height=500) # 预处理 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blur = cv2.GaussianBlur(gray, (5, 5), 0) edged = cv2.Canny(blur, 75, 200) show(edged)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpddfd.html