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

  • 1. 效果图
  • 2. 源码
  • 参考

这篇博客将介绍如何使用Python和OpenCV进行文本偏斜校正。给定图像包含未知角度的旋转文本块,需要通过以下方法纠正文本倾斜:

  • 检测图像中的文本块;
  • 计算旋转文本的角度;
  • 旋转图像以校正歪斜;

该算法本身非常简单,仅依赖于基本的图像处理技术,例如阈值处理,计算旋转矩形的最小面积,然后应用仿射变换来校正偏斜。

通常会在自动文档分析中使用这种文本偏斜校正算法,目标是将一组文档数字化,校正文本偏斜,然后应用OCR将图像中的文本转换为机器编码的文本。但是该算法也可以应用于其他领域。

1. 效果图

顺时针旋转——效果图一如下:

逆时针旋转——效果图二如下:

2. 源码

# USAGE
# python correct_skew.py --image images/neg_4.png# 导入必要的包
import numpy as np
import argparse
import cv2# 构建命令行参数及解析
# --image 输入图像路径
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,help="path to input image file")
args = vars(ap.parse_args())# 从磁盘加载照片
image = cv2.imread(args["image"])# 将图像转换为灰度并翻转前景和背景以确保前景现在为“白色”,背景为“黑色”
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.bitwise_not(gray)# 阈值化图像,设置所有前景色位255,所有背景色位0
# 在应用计算机视觉和图像处理操作时,通常将前景表示为浅色,而背景(我们不感兴趣的图像部分)则变暗。
thresh = cv2.threshold(gray, 0, 255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]# 获取所有像素的(x,y)坐标,并对大于0的像素计数,然后使用这些坐标计算旋转边界框
coords = np.column_stack(np.where(thresh > 0))
angle = cv2.minAreaRect(coords)[-1]# cv2.minAreaRect返回[-90,0]
# 随着矩形顺时针旋转,角度值将朝零增加。当达到零时,角度将再次设置回-90度,然后过程继续。
# 因此当角度<0时,需要+90度取反数
if angle > 45:  #此俩行代码有改动angle = 90 - angle  #此俩行代码有改动
# 否则,仅取角度的倒数
else:angle = -angle# 旋转图像以达到文本倾斜校正
# 计算图像的中心(x,y)坐标。利用中心坐标和旋转角度调用cv2.getRotationMatrix2D计算旋转矩阵M,应用旋转矩阵进行实际的变换
(h, w) = image.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, angle, 1.0)
rotated = cv2.warpAffine(image, M, (w, h),flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)# 绘制校正角度在图像上以验证
cv2.putText(rotated, "Angle: {:.2f} degrees".format(angle),(10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)# 展示输出图像
print("[INFO] angle: {:.3f}".format(angle))
cv2.imshow("Input", image)
cv2.imshow("Rotated", rotated)
cv2.waitKey(0)

参考

  • https://www.pyimagesearch.com/2017/02/20/text-skew-correction-opencv-python/

使用Python和OpenCV进行文本偏斜校正相关推荐

  1. python.freelycode.com-通过OpenCV和Python进行文本倾斜校正

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 本文所展示的是一个由Pyhton实现的文本倾斜校正的脚本,在实现中使用到了OpenCV和Python的图像 ...

  2. OpenCV纠正文本中的偏斜(附完整代码)

    OpenCV纠正文本中的偏斜 OpenCV纠正文本中的偏斜 OpenCV纠正文本中的偏斜 #include <opencv2/core.hpp> #include <opencv2/ ...

  3. 用python的opencv库在图片上画出蓝底黑字的文本框

    以下是使用Python的OpenCV库实现在图片上绘制的示例代码: import cv2# 读入图片 img = cv2.imread('example.jpg')# 在图片上绘制红色矩形框 cv2. ...

  4. 使用Python,OpenCV和Scikit-Image检测低对比度图像

    使用Python,OpenCV和Scikit-Image检测低对比度图像 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍如何使用Python,OpenCV和Scikit-Image检测低对 ...

  5. 使用Python,OpenCV进行卡类型及16位卡号数字的OCR

    使用Python,OpenCV进行卡类型及16位卡号数字的OCR 1. 效果图 2. 原理 2.1 OCR-A字体 2.2 检测过程步骤 2.3 优化 3. 源代码 参考 这篇博客将介绍如何通过Ope ...

  6. 使用Python,OpenCV,本地二进制模式(LBP)进行人脸识别

    使用Python,OpenCV与本地二进制模式(LBP)进行人脸识别 1. 效果图 2. 原理及步骤 2.1 原理 2.2 步骤 3. 源码 参考 在深度学习和暹罗网络之前,面部识别算法依赖于特征提取 ...

  7. Python,OpenCV轮廓属性、轮廓检测及绘制

    Python,OpenCV轮廓属性.轮廓检测及绘制 1. 效果图 2. 源码 2.1 轮廓属性 2.2 轮廓特征 参考 这篇博客将介绍OpenCV中的轮廓,轮廓的特征及属性(质心,面积,轮廓,近似轮廓 ...

  8. Python,OpenCV应用轮廓逼近算法,检测对象的形状

    上一篇博客,我们学习了如何利用Python.OpenCV计算轮廓的中心,这一节学习仅运用轮廓的基本属性来检测其形状,三角形,正方形,矩形,五边形,圆. (1)利用轮廓逼近,将曲线上的点数减少为更简单的 ...

  9. 使用Python,OpenCV进行Tesseract-OCR绑定及识别

    使用Python,OpenCV进行Tesseract-OCR绑定及识别 1. 效果图 2. 安装Tesseract+Python"绑定"及识别 3. 源码 参考 上一篇博客介绍了W ...

最新文章

  1. Spring Boot2.x-11 使用@ControllerAdvice和@ExceptionHandler实现自定义全局异常
  2. 【随笔】工程师都是性情中人
  3. Windows8.1提升权限安装程序
  4. IIS服务中五种身份验证的灵活运用-转
  5. c#获取当前应用程序所在路径
  6. 大数据基础篇(一):联机分析处理(OLAP) 与 联机事务处理(OLTP)
  7. oracle密码锁屏时间,Oracle Linux OEL7 如何关闭屏保和锁屏功能
  8. excanvas让canvas兼容ie7,8
  9. 伟福6000微型计算机,伟福6000仿真软件
  10. Unity MRTK(三)部署到Hololens模拟器
  11. 绝对估值法和相对估值法
  12. CSS设置背景颜色透明
  13. NTFS分区和FAT32分区区别
  14. 秦俊东北计算机博士,秦 俊 教授-云南大学省部共建教育部自然资源药物化学重点实验室...
  15. 可以称为是“钢铁侠” 原型
  16. 微信小程序连接华为云ModelArts的方法以及一些小坑(一)
  17. tf.contrib.slim常用方法
  18. HTML5七夕520情人节表白网页❤ 属于我们的浪漫星空 ❤ HTML+CSS+JavaScript
  19. Discuz!NT 代码阅读笔记(8)--DNT的几个分页存储过程解析
  20. Linux抓包和分析

热门文章

  1. MySQL基础之select基本查询
  2. [JAVA EE] JPA 查询用法:自定义查询,分页查询
  3. python 读取excel 表格的数据
  4. Android @id和@+id 以及 @android:id 的区别
  5. Flutter 拨打电话和跳转网页
  6. Flutter 导包 以及体验
  7. HDU-1459.非常可乐(BFS )
  8. Spring整合Struts2
  9. 0 - python简介
  10. Maven(插件配置和生命周期的绑定)