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使用7z解压软件备份文件脚本分享
Feb 21 Python
Python使用爬虫猜密码
Feb 19 Python
Python 编码处理-str与Unicode的区别
Sep 06 Python
python入门教程之识别验证码
Mar 04 Python
python找出完数的方法
Nov 12 Python
解决nohup执行python程序log文件写入不及时的问题
Jan 14 Python
FFT快速傅里叶变换的python实现过程解析
Oct 21 Python
tensorflow 自定义损失函数示例代码
Feb 05 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
May 12 Python
python中re模块知识点总结
Jan 17 Python
Python中Pyspider爬虫框架的基本使用详解
Jan 27 Python
Python OpenCV超详细讲解读取图像视频和网络摄像头
Apr 02 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批量修改表结构实例
2017/05/24 PHP
对联广告js flash激活
2006/10/19 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
headjs实现网站并行加载但顺序执行JS
2016/11/29 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
开源一个微信小程序仪表盘组件过程解析
2019/07/30 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
原生jQuery实现只显示年份下拉框
2020/12/24 jQuery
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
Python获取DLL和EXE文件版本号的方法
2015/03/10 Python
python多进程实现进程间通信实例
2017/11/24 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
python通过函数名调用函数的几种场景
2020/09/23 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
英国领先的高街书籍专家:Waterstones
2018/02/01 全球购物
文件中有一组整数,要求排序后输出到另一个文件中
2012/01/04 面试题
初任培训自我鉴定
2013/10/07 职场文书
跟单文员的岗位职责
2013/11/14 职场文书
乐观大学生的自我评价
2014/01/10 职场文书
宣传保护环境的公益广告词
2014/03/13 职场文书
金融保险专业求职信
2014/09/03 职场文书
借名购房协议书范本
2014/10/06 职场文书
任命书格式模板
2015/09/22 职场文书
golang json数组拼接的实例
2021/04/28 Golang
redis哨兵常用命令和监控示例详解
2021/05/27 Redis
javascript的var与let,const之间的区别详解
2022/02/18 Javascript