Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

本文所展示的是一个由Pyhton实现的文本倾斜校正的脚本,在实现中使用到了OpenCV和Python的图像处理函数。

假设我们有一幅图像,图像中的文本被旋转了一个未知的角度。为了对文字进行角度的校正,我们需要完成如下几个步骤:

1、检测出图中的文本范围

2、计算出文本被旋转的角度

3、将图像旋转特定的角度

本文所介绍的文本角度校正算法一般被用于自动化文档分析。但是,这个过程本身可以有其他的应用。

通过OpenCV和Python实现文本角度校正

下文将详细介绍如何使用Python和OpenCV中的基本图像处理函数实现文本的角度校正。

首先,我们将创建一个简单的案例用于检测我们的校正方案。我们将通过Pyhton和OpenCV编写一个在图片中自动识别并校正文本角度的程序。

一个简单案例

在下面的例子中,我们准备了一个简单的测试案例。在这个案例中有四幅图,图中的文本被旋转了特定的角度。

图1 我们的测试案例,下面我们将用OpenCV和Python对图中文本的角度进行校正

这四幅图对应了如下四个文件

文件名的前半部分代表了图中文本被旋转的方向,其中neg表示逆时针旋转,pos表示顺时针旋转。文件名的第二部分表示被旋转的具体角度。

我们的算法将识别出图像被旋转的方向和角度,进而对其进行校正。下面,我们将介绍如何实现上述功能。

基于OpenCV和Pyhton的文本倾斜校正

首先,我们建立一个新文件,并命名为correct_skew.py,并在文件中插入如下代码:

代码2—4行引入需要的Pyhton包。我们通过引入cv2调用OpenCV,假设您已经在系统中安装了OpenCV,请参考对应的OpenCV install tutorial在进行系统的配置。下面我们对代码7—10行进行解析,我们在此只需要一个参数,即--image,该参数代表了图像的路径。

在代码的第13行,图像被从磁盘读入。

下一步我们将从图像中识别出文本

在我们的图像中,文字是黑色的而背景是浅色的。然而,为了正确地执行我们的算法,我们需要将图像反转(即将文字变成浅色的而背景变成深色的)。因为在计算机上执行图像操作的时候,一般前景色为浅色,而背景(图像中我们不关心的内容)为黑色。

上述代码23行和24行我们对图像颜色进行了二值化处理。

图2 经过二值化处理和颜色反转后的图像

有了这个二值化的图像,我们可以计算出包含了被旋转文本的最小边框。

通过第30行代码找出二值图像中包含前景色的部分的(x,y)坐标。

我们将这些坐标作为参数传递给函数cv2.minAreaRect,该函数将给出包含着整个文字区域矩形边框,这个边框的旋转角度与图中文本的旋转角度一致。

函数cv2.minAreaRect将返回一个[-90,0)区间内的角度。代码37行和38行处理返回的角度小于-45度的情况,在这样的情况下,我们需要在原来的角度上增加90度然后在进行校正。当返回的角度大于-45度的时候,我们直接对角度进行回转。

我们已经确定了文本的倾斜角度,现在,我们需要执行一个仿射变换对倾斜角度进行校正。

代码第46行和47行确定了图像的中心坐标(X,Y),我们中心坐标和旋转角作为参数传递给函数cv2.getRotationMatrix2D(代码第48行)。所得到的旋转矩阵M将在代码第49行和50行执行确切的变换。

最后,我们在屏幕上显示我们的结果。

代码第53行,我们将旋转的角度显示在图像上,以标示所输出的图像对应怎样的旋转角度。代码57行至60行用于显示输出的图像。

倾斜角度校正结果

有了上述结果,我们通过以下命令来校正图像neg_4.png的角度:

图3 使用OpenCV和Python对文本进行倾斜校正

从图中我们可以看到,输入的图像被逆时针旋转了4度。我们的程序检测出了这个角度,并对其进行了校正。

下面是另一个例子,这一例子中逆时针倾斜的角度为28度。

图4 使用OpenCV和Python对文本进行倾斜校正

再一次,我们的算法对输入的图像进行了校正。

这次我们尝试一个顺时针旋转的倾斜角:

图5使用OpenCV和Python对文本进行倾斜校正

最后,我们尝试一个41度的大角度倾斜:

图6使用OpenCV和Python对文本进行倾斜校正

无论怎样的倾斜角度,我们的算法都能够使用OpenCV和Python进行倾斜角的校正。

总结

在今天的教程中,我们使用Python进行了倾斜角度的校正。

所介绍的算法简洁明了,使用了一些基本的图像处理技术如二值化、计算最小旋转矩形和使用仿射变换对角度进行校正。

我们可以将这项技术使用到自动文档分析中,通过将所介绍的方法应用到文档扫描件上,对倾斜角度进行校正,然后利用OCR技术将图像中的文本转化成计算机中的文本字符。

我们希望您喜欢这个教程。

英文原文:http://www.pyimagesearch.com/2017/02/20/text-skew-correction-opencv-python/

译者:wlzmmm

python.freelycode.com-通过OpenCV和Python进行文本倾斜校正相关推荐

  1. python.freelycode.com-最难搞的python“反面”代码

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 下文是Aaron Maxwell投递的客座博文,他是Advanced Python Newsletter的 ...

  2. python车辆检测_使用OpenCV和Python构建自己的车辆检测模型

    总览对智慧城市的想法感到兴奋吗? 您会喜欢本教程,内容是构建自己的车辆检测系统. 首先,我们将了解如何在视频中检测运动物体,然后再进入实践部分. 介绍 我喜欢智慧城市的想法.关于自动化智能能源系统,电 ...

  3. python 扫描仪_基于Opencv和Python的多选扫描仪

    首先,我检测到图像右侧的20个黑框,然后将x和宽度添加到列表中:image = cv2.imread(args["image"]) gray = cv2.cvtColor(imag ...

  4. opencv 两点之间角度 与倾斜校正应用

    转自:http://blog.csdn.net/u012767067/article/details/19402239 以下代码返回的角度范围是0-360 /********************* ...

  5. 使用Python和OpenCV进行文本偏斜校正

    使用Python和OpenCV进行文本偏斜校正) 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Python和OpenCV进行文本偏斜校正.给定图像包含未知角度的旋转文本块,需要通过以下方法纠 ...

  6. 【中英双语】计算机视觉Opencv、Python大师班

    [中英双语]计算机视觉Opencv.Python大师班 使用 Opencv 和 Python 学习计算机视觉的基础知识 此教程共4.0小时,中英双语字幕,画质清晰无水印,源码附件全 课程英文名:Com ...

  7. python图像倾斜校正_校正倾斜的文本

    有时候文本是倾斜的,则不利于文本识别,如下图所示,那么进行文本识别之前我们需要应用文本倾斜校正算法(text skew correction,deskewing text). 对于一幅包含旋转文本块的 ...

  8. opencv java lean.png_text-lean_opencv VS2015.使用 实现水平面的文本倾斜,调整角度可 矫正。 256万源代码下载- www.pudn.com...

    文件名称: text-lean_opencv下载  收藏√  [ 5  4  3  2  1 ] 开发工具: C++ 文件大小: 7231 KB 上传时间: 2016-04-17 下载次数: 0 提 ...

  9. 使用OpenCV,Python和dlib进行眨眼检测及计数

    前三篇博客学习了 windows10+Python3.7安装dlib库进行面部标志识别 python dlib实现面部标志识别 使用python,dlib,OpenCV提取眼睛,鼻子,嘴唇及下颌 这篇 ...

最新文章

  1. Memcache 内存分配策略和性能(使用)状态检查
  2. 需求文档可以不签字吗之二-理论推导
  3. iPhone 11 送一台!不爱可折现!
  4. 【今晚7点】:圆桌PI回归 继续聊聊开源的故事
  5. linux一句话问答(网络无关篇+网络相关篇+程序开发篇+经典图书)
  6. 【LeetCode】【HOT】101. 对称二叉树(BFS+队列/递归)
  7. 用C语言扩展lua模块(入门)
  8. matlab中 编程如和隐藏,在matlab中编程(如何实时处理)
  9. MySQL之 分库分表
  10. php enum 数字类型插入失败的解决办法
  11. SecureCRT中文显示乱码的解决方法
  12. 鼎力加密狗驱动程序_怎么安装加密狗驱动程序
  13. 机械制图国家标准的绘图模板_从制图到数字制图,你知道真相吗
  14. 解答篇:金蝶K3wise截取活动窗口
  15. 怎么从已有文件中挑选需要的文字重新生成新文件_CAD问题全面解答(几乎涵盖了CAD使用的全部问题)...
  16. Python ADF检验
  17. 什么是运动模糊(Motion Blur)
  18. 网页上播放视频的免费的播放器_CKPlayer
  19. 获取股票历史数据——数据采集(1)
  20. php设置pst时区,PHP时区标识符含义

热门文章

  1. linux svn添加新文件夹,linux svn 添加文件夹
  2. python调用php命令行,python调用php函数 python怎样调用php文件中的函数详解
  3. mybatis date类型映射_MapStruct 映射工具
  4. python提供的默认的构造方法是什么_Python面试常见问题,__init__是构造函数吗?...
  5. ES等待任务——是master节点上的task任务
  6. 大数据分析处理框架——离线分析(hive,pig,spark)、近似实时分析(Impala)和实时分析(storm、spark streaming)...
  7. windows 安装 reviewboard
  8. docker 挂载空间到docker
  9. cogs 610. 数对的个数
  10. poj 2923(状态压缩dp)