Python+OpenCV实现旋转文本校正方式


Posted in Python onJanuary 09, 2020

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

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

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

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

第一步、读取图像,并做二值化处理

#读取图像,做二值化处理
img = cv.imread('img/imageTextR.png')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imshow('gray', gray)
#像素取反,变成白字黑底
# gray = cv.bitwise_not(gray)
ret, thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
cv.imshow('thresh', thresh)

Python+OpenCV实现旋转文本校正方式

第二步、计算包含了被旋转文本的最小边框

#计算包含了旋转文本的最小边框
coords = np.column_stack(np.where(thresh > 0))
print(coords)
#该函数给出包含着整个文字区域矩形边框,这个边框的旋转角度和图中文本的旋转角度一致
angle = cv.minAreaRect(coords)[-1]
print(angle)

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

第三步、调整角度

#调整角度
if angle < -45:
  angle = -(90+ angle)
else:
  angle = -angle

在角度小于-45的情况下,在原来的角度上增加90度,角度大于-45度,直接对角度反转。

第四步、执行仿射变换

#仿射变换
h, w = img.shape[:2]
center = (w//2, h//2)
print(angle)
M = cv.getRotationMatrix2D(center, angle, 1.0)
rotated = cv.warpAffine(img, M, (w, h), flags=cv.INTER_CUBIC, borderMode=cv.BORDER_REPLICATE)
cv.putText(rotated, 'Angle: {:.2f} degrees'.format(angle), (10, 30), cv.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)

print('[INFO] angel :{:.3f}'.format(angle))
cv.imshow('Input', img)
cv.imshow('Rotated', rotated)

Python+OpenCV实现旋转文本校正方式

以上这篇Python+OpenCV实现旋转文本校正方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现字符串格式化的方法小结
Feb 20 Python
python调用API实现智能回复机器人
Apr 10 Python
python基于C/S模式实现聊天室功能
Jan 09 Python
深入浅析python3中的unicode和bytes问题
Jul 03 Python
Numpy中对向量、矩阵的使用详解
Oct 29 Python
python 计算积分图和haar特征的实例代码
Nov 20 Python
python数据类型可变不可变知识点总结
Mar 06 Python
对python中arange()和linspace()的区别说明
May 03 Python
Python之变量类型和if判断方式
May 05 Python
python3中calendar返回某一时间点实例讲解
Nov 18 Python
Python使用openpyxl复制整张sheet
Mar 24 Python
Python实现学生管理系统并生成exe可执行文件详解流程
Jan 22 Python
Python 实现OpenCV格式和PIL.Image格式互转
Jan 09 #Python
Python实现i人事自动打卡的示例代码
Jan 09 #Python
Python 实现opencv所使用的图片格式与 base64 转换
Jan 09 #Python
python PIL/cv2/base64相互转换实例
Jan 09 #Python
Python&amp;&amp;GDAL实现NDVI的计算方式
Jan 09 #Python
Python-numpy实现灰度图像的分块和合并方式
Jan 09 #Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
Jan 09 #Python
You might like
用PHP写的基于Memcache的Queue实现代码
2011/11/27 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
javascript replace方法与正则表达式
2008/02/19 Javascript
JS解密入门之凭直觉解
2008/06/25 Javascript
关于JQuery($.load)事件的用法和分析
2013/04/09 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
2013/09/02 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
jQuery+ajax实现实用的点赞插件代码
2016/07/06 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
基于jquery实现五星好评
2017/11/18 jQuery
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
用Python的urllib库提交WEB表单
2009/02/24 Python
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
Python运行提示缺少模块问题解决方案
2020/04/02 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
django中ImageField的使用详解
2020/12/21 Python
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
HTML5如何使用SVG的方法示例
2019/01/11 HTML / CSS
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
函授本科自我鉴定
2013/11/03 职场文书
工作自我评价分享
2013/12/01 职场文书
品牌转让协议书
2014/08/20 职场文书
办公室主任四风问题对照检查材料思想汇报
2014/09/28 职场文书
2015年社区创卫工作总结
2015/04/21 职场文书