使用Python和OpenCV进行文本偏斜校正
使用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进行文本偏斜校正相关推荐
- python.freelycode.com-通过OpenCV和Python进行文本倾斜校正
Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 本文所展示的是一个由Pyhton实现的文本倾斜校正的脚本,在实现中使用到了OpenCV和Python的图像 ...
- OpenCV纠正文本中的偏斜(附完整代码)
OpenCV纠正文本中的偏斜 OpenCV纠正文本中的偏斜 OpenCV纠正文本中的偏斜 #include <opencv2/core.hpp> #include <opencv2/ ...
- 用python的opencv库在图片上画出蓝底黑字的文本框
以下是使用Python的OpenCV库实现在图片上绘制的示例代码: import cv2# 读入图片 img = cv2.imread('example.jpg')# 在图片上绘制红色矩形框 cv2. ...
- 使用Python,OpenCV和Scikit-Image检测低对比度图像
使用Python,OpenCV和Scikit-Image检测低对比度图像 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍如何使用Python,OpenCV和Scikit-Image检测低对 ...
- 使用Python,OpenCV进行卡类型及16位卡号数字的OCR
使用Python,OpenCV进行卡类型及16位卡号数字的OCR 1. 效果图 2. 原理 2.1 OCR-A字体 2.2 检测过程步骤 2.3 优化 3. 源代码 参考 这篇博客将介绍如何通过Ope ...
- 使用Python,OpenCV,本地二进制模式(LBP)进行人脸识别
使用Python,OpenCV与本地二进制模式(LBP)进行人脸识别 1. 效果图 2. 原理及步骤 2.1 原理 2.2 步骤 3. 源码 参考 在深度学习和暹罗网络之前,面部识别算法依赖于特征提取 ...
- Python,OpenCV轮廓属性、轮廓检测及绘制
Python,OpenCV轮廓属性.轮廓检测及绘制 1. 效果图 2. 源码 2.1 轮廓属性 2.2 轮廓特征 参考 这篇博客将介绍OpenCV中的轮廓,轮廓的特征及属性(质心,面积,轮廓,近似轮廓 ...
- Python,OpenCV应用轮廓逼近算法,检测对象的形状
上一篇博客,我们学习了如何利用Python.OpenCV计算轮廓的中心,这一节学习仅运用轮廓的基本属性来检测其形状,三角形,正方形,矩形,五边形,圆. (1)利用轮廓逼近,将曲线上的点数减少为更简单的 ...
- 使用Python,OpenCV进行Tesseract-OCR绑定及识别
使用Python,OpenCV进行Tesseract-OCR绑定及识别 1. 效果图 2. 安装Tesseract+Python"绑定"及识别 3. 源码 参考 上一篇博客介绍了W ...
最新文章
- Spring Boot2.x-11 使用@ControllerAdvice和@ExceptionHandler实现自定义全局异常
- 【随笔】工程师都是性情中人
- Windows8.1提升权限安装程序
- IIS服务中五种身份验证的灵活运用-转
- c#获取当前应用程序所在路径
- 大数据基础篇(一):联机分析处理(OLAP) 与 联机事务处理(OLTP)
- oracle密码锁屏时间,Oracle Linux OEL7 如何关闭屏保和锁屏功能
- excanvas让canvas兼容ie7,8
- 伟福6000微型计算机,伟福6000仿真软件
- Unity MRTK(三)部署到Hololens模拟器
- 绝对估值法和相对估值法
- CSS设置背景颜色透明
- NTFS分区和FAT32分区区别
- 秦俊东北计算机博士,秦 俊 教授-云南大学省部共建教育部自然资源药物化学重点实验室...
- 可以称为是“钢铁侠” 原型
- 微信小程序连接华为云ModelArts的方法以及一些小坑(一)
- tf.contrib.slim常用方法
- HTML5七夕520情人节表白网页❤ 属于我们的浪漫星空 ❤ HTML+CSS+JavaScript
- Discuz!NT 代码阅读笔记(8)--DNT的几个分页存储过程解析
- Linux抓包和分析