本文所展示的是一个由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 图像倾斜校正_通过OpenCV和Python进行文本倾斜校正相关推荐

  1. 使用opencv和python进行智能图像处理_使用OpenCV在Python中进行图像处理

    编辑推荐: 本文将先讨论一些图像处理,然后再继续介绍可以方便使用图像处理的不同应用程序/场景,希望对您的学习有所帮助. 本文来自于tecdat ,由火龙果软件Alice编辑.推荐. 介绍 在本教程中, ...

  2. Python 图像 一样大小_#带你学Python# 表白利器:用Python发微信表情画-带你认识图片的秘密...

    首先感谢大家对上篇文章"python实现传染病模型"的肯定: 孙小白:#带你学Python# 疫情当前,在家没事?你也可以用Python预测疫情发展​zhuanlan.zhihu. ...

  3. python人脸识别理论_使用OpenCV和Python进行人脸识别

    介绍 人脸识别是什么?或识别是什么?当你看到一个苹果时,你的大脑会立刻告诉你这是一个苹果.在这个过程中,你的大脑告诉你这是一个苹果水果,用简单的语言来说就是识别.那么什么是人脸识别呢?我肯定你猜对了. ...

  4. python找图片不同_用openCV和Python 实现图片对比,并标识出不同点的方式

    最近项目中需要实现两组图片对比,并能将两者的区别标识出来. 在网上搜索一大堆找到一篇大神的文章,最终实现该功能,在这里记录下: 想要实现此demo,首先我们得确保电脑上已安装 openCV 和 Pyt ...

  5. python实现对数转换_利用opencv在python平台上实现二值变换,伽马变换,对数变换,补色变换等...

    如何用 opencv 在 python 平台上实现灰度图像的二值化,对数变换, ,伽马变换以及补色变 换.代码如下 import cv2 import copy import math import  ...

  6. opencv和python是什么关系_使用OpenCV和Python检测眼睛

    今天,我们将学习如何借助称为霍夫变换的技术来检测图像中的直线和圆. 什么是霍夫空间? 在开始对图像应用霍夫变换之前,我们需要了解霍夫空间是什么,我们将通过示例的方式来学习. 参数空间 当我们处理图像时 ...

  7. Python 图像 一样大小_教你把Python当美图秀秀用(一)

    本文作者:钱梦璇 文字编辑:孙晓玲 技术总编:张   邯 导读 Python中有一个第三方图像数据库,由于其强大功能和简单易用的API几乎被认为是Python平台上的官方图像处理库了,它就是PIL(P ...

  8. python 摄像头录制帧率_基于opencv和python的可变帧速率IP摄像机视频记录

    首先,我想对我正在做的事情发表评论.在 我有一个IP摄像机通过一个带以太网线的路由器连接到我的网络(FOSCAM 9800p),我试图用RTSP协议录制一段视频.我未来的打算是用opencv在中间添加 ...

  9. python如何实现找图_利用OpenCV和Python实现查找图片差异

    使用OpenCV和Python查找图片差异 flyfish 方法1 均方误差的算法(Mean Squared Error , MSE) 下面的一些表达与<TensorFlow - 协方差矩阵&g ...

  10. 车辆销售系统用例_使用OpenCV和Python构建自己的车辆检测模型

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

最新文章

  1. Java线程安全 关于原子性与volatile的试验
  2. 电影天堂React Native 客户端
  3. python的文件类型
  4. jQuery 学习笔记之九 (jQuery 图片提示 )
  5. CSV与List的互相转换(python实现)
  6. 投靠Linux第一步 Windows数据向Linux迁徙(1)
  7. java+log日志服务器_Logserver日志服务器结构
  8. MDK530编译出现ARM版本不符问题
  9. 反编译android 状态栏沉浸,教程:反编译修改实现状态栏时间居左,去除锁屏运营商...
  10. PyTips 0x14 - Python 描述符
  11. 20181224每日一句
  12. java开源bi_poli-java开源BI软件
  13. php不改写mysql函数_利用php修改mysql数据库表前缀
  14. cmd连局域网mysql_cmd连接局域网mysql
  15. 微信网页版扫码登录是如何实现的?
  16. Redis的那些事儿:关系型和非关系型数据库,非关系型数据库的类型,redis数据类型、编码格式、高性能、可以做什么、分布式锁失效的原因,string为采用sds数据类型,为什么是二进制安全的,
  17. 【Cactus仙人掌图】仙人掌基础知识学习笔记
  18. vim/vi中的光标键会变成a,b,c,d的解决办法
  19. 服务器安装VMware ESXI5.5
  20. 微课 展示 php 源码,PHP从零基础到项目实战(微课视频版)

热门文章

  1. 强烈推荐《全景探秘游戏设计艺术》
  2. 微星小飞机怎么显示帧数?方法介绍
  3. Hi3559V100基本信息
  4. 奥维互动地图自定义地图
  5. Hololens开发学习笔记——海康摄像头直播视频流
  6. 限时免费下载《程序员面试宝典》.pdf
  7. getTickCount()函数 区别GetTickCount()函数
  8. Python实现线性反馈移位寄存器实例信息安全导论期中小作业
  9. 机械系统传动创新组合设计实验台,QY-JXSX08
  10. Dreamweaver制作漂亮的网页Flash电子相册