首页 > 编程语言 >实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)

实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)

时间:2022-10-18 13:34:44浏览次数:51  
标签:矫正 直线 倾斜 OpenCV 角度 源码 拟合 详解


导读

本文主要介绍使用OpenCV对扫描文本矫正的应用实例及详细实现步骤。

背景介绍

在使用打印机或扫描仪扫描文档时,由于摆放位置差异难免造成扫描文档的倾斜。本文将使用OpenCV将倾斜的文档矫正水平并去除黑边。

实现步骤

本文只针对包含大部分文字的文档做倾斜矫正,思路来源是大部分文字倾斜后同一行的也在同一条直线,通过拟合直线计算文本倾斜角度,然后旋转来实现文本倾斜矫正。

详细步骤:

① 加载倾斜图像

实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)_最小值

② 灰度转换+腐蚀+膨胀

实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)_直线拟合_02

③ Canny边缘检测 + 霍夫线变换检测直线

实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)_直线拟合_03

实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)_最小值_04

④ 计算直线角度中值作为最终的旋转角度,旋转图像

注意不建议用最值或平均值,因为霍夫线变换有可能拟合到异常角度直线,最值或均值会导致最终角度偏大或偏小,使矫正结果偏差较大。

为什么使用均值?大家可以结合中值滤波的概念来理解。

举例来说:霍夫线变换找到了10条直线,角度分别为:0°,5°,25°,26°,26°,28°,28°,30°,100°,150°。如果去最大值angle=150°,最小值angle=0°,平均值angle=41.8°,中值angle=27°,明显中值结果更准确,更符合直线拟合角度的统计特性,因为拟合直线结果中大部分直线拟合是准确的,这部分角度会集中在一起。当然,使用直方图统计,计算出现频率最多的角度范围更准确,大家可以自行尝试。

实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)_直线拟合_05

⑤ 去除边角黑边(使用漫水填充或轮廓删选方式)

实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)_拟合_06

⑥ 换两张图片测试


实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)_直线拟合_07

实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)_拟合_08

Python-OpenCV实现源码

链接:https://pan.baidu.com/s/1fja5mvGjuw3X4eMtjiSX0g

提取码:5lon



更多视觉图像处理相关内容,请长按关注:OpenCV与AI深度学习。

实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)_拟合_09

标签:矫正,直线,倾斜,OpenCV,角度,源码,拟合,详解
From: https://blog.51cto.com/stq054188/5765891

相关文章