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 client使用http post 到server端的代码
Feb 10 Python
使用Python的Supervisor进行进程监控以及自动启动
May 29 Python
使用python调用浏览器并打开一个网址的例子
Jun 05 Python
python中zip和unzip数据的方法
May 27 Python
python中正则表达式 re.findall 用法
Oct 23 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
Jun 12 Python
python 随机生成10位数密码的实现代码
Jun 27 Python
python将类似json的数据存储到MySQL中的实例
Jul 12 Python
在django中图片上传的格式校验及大小方法
Jul 28 Python
python 修改本地网络配置的方法
Aug 14 Python
Python实现投影法分割图像示例(一)
Jan 17 Python
Python Numpy中数据的常用保存与读取方法
Apr 01 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
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
使用VisualStudio开发php的图文设置方法
2010/08/21 PHP
php实现的一个很好用HTML解析器类可用于采集数据
2013/09/23 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
关于jQuery中的end()使用方法
2011/07/10 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
2012/01/15 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
Bootstrap每天必学之标签与徽章
2015/11/27 Javascript
Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
2016/07/14 Javascript
Vue.js中数组变动的检测详解
2016/10/12 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
2017/05/11 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
Vue自定义指令封装节流函数的方法示例
2018/07/09 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
layui使用templet格式化表格数据的方法
2019/09/16 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
构建大型 Vue.js 项目的10条建议(小结)
2019/11/14 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
[00:32]2016完美“圣”典风云人物:Maybe宣传片
2016/12/05 DOTA
python爬取网页内容转换为PDF文件
2020/07/28 Python
在Python中实现shuffle给列表洗牌
2018/11/08 Python
详解Python基础random模块随机数的生成
2019/03/23 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
关于python中plt.hist参数的使用详解
2019/11/28 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
《珍珠泉》教学反思
2014/02/20 职场文书
信息员培训方案
2014/06/12 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
2016情人节宣传语
2015/07/14 职场文书
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript