C# OpenCvSharp 基于霍夫变换直线检测的文本图像倾斜校正文本图像倾斜校
项目简介
这是是一个基于OpenCvSharp的 Windows 桌面应用程序,用于对倾斜的文本图像进行自动角度检测与校正。程序采用 WinForms 界面,支持用户上传图像,实时显示原始图像与校正后的结果图像,并输出检测到的倾斜角度。
算法原理
本项目采用**基于霍夫直线检测(Hough LineTransform)**的倾斜校正算法,整体处理流程如下:
原始图像 → 灰度化 → 二值化 → 形态学膨胀 → Canny边缘检测 → 霍夫直线检测 → 计算平均倾斜角 → 仿射旋转校正各步骤说明
| 步骤 | 说明 |
|---|---|
| 灰度化 | 将彩色图像转为单通道灰度图,降低计算复杂度 |
| 二值化 | 使用固定阈值(50)进行反向二值化,使文字区域变为白色前景 |
| 形态学膨胀 | 使用 7×1 矩形结构元素进行水平方向膨胀,将同一行文字连通为整体 |
| Canny 边缘检测 | 对膨胀结果进行边缘提取,得到文字行的上下边缘轮廓 |
| 霍夫直线检测 | 在极坐标空间中检测直线,参数:距离分辨率 1px,角度分辨率 1°,累加器阈值 110 |
| 计算平均角度 | 将所有检测到的直线角度求均值,作为整体倾斜角 |
| 仿射旋转校正 | 以图像中心为旋转中心,使用WarpAffine对原图进行反向旋转,完成校正 |
环境要求
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 10 / 11(64 位) |
| IDE | Visual Studio 2019 或更高版本 |
| 框架 | .NET Framework 4.7.2 |
| 平台架构 | x64 |
| 语言 | C#(语法版本 ≤ 6.0) |
| 依赖库 | OpenCvSharp 4.13.0 |
安装步骤
确保已安装Visual Studio 2019,并勾选".NET 桌面开发"工作负载。
克隆或下载本项目到本地:
gitclone<仓库地址>使用 Visual Studio 打开解决方案文件
FIRC.sln。在 Visual Studio 顶部工具栏中,将平台切换为x64,配置选择Debug。
OpenCvSharp 相关 DLL 已放置于
bin\x64\Debug\目录,无需额外安装。若需重新生成,可通过 NuGet 安装:Install-Package OpenCvSharp4 -Version 4.13.0 Install-Package OpenCvSharp4.Extensions -Version 4.13.0 Install-Package OpenCvSharp4.runtime.win -Version 4.13.0执行一次"生成 → 重新生成解决方案",确认无编译错误。
运行步骤
在 Visual Studio 中将平台设置为x64,配置选择Debug,按
F5启动程序。程序启动后显示主界面,包含两个按钮和两个图像显示区域:
上传图片:使用算法1(霍夫直线检测)进行倾斜校正
上传图片(算法2):预留算法2接口
点击"上传图片"按钮,在弹出的文件选择对话框中选择一张图像文件(支持
.jpg、.jpeg、.png、.bmp、.tif、.tiff)。程序自动完成图像处理与校正,界面将显示:
左侧:原始图像
右侧:校正结果
顶部标签:检测到的倾斜角度
如需测试其他图像,直接再次点击按钮重新选择即可。
注意事项
必须使用 x64 平台编译运行,OpenCvSharp 原生库(
OpenCvSharpExtern.dll)仅提供 x64 版本,AnyCPU 模式下会抛出BadImageFormatException。语法限制:项目严格遵循 C# 6.0 语法规范,禁止使用以下 C# 7.0+ 特性:
字符串插值(
$"...")空值条件运算符(
?.、??=)模式匹配(
is/switch模式)元组解构
局部函数
图像要求:算法适用于包含明显水平文本行的图像,背景需与文字有足够对比度。若图像中无直线被检测到,程序会弹出提示。
二值化阈值:当前固定阈值为 50,若图像整体偏亮或偏暗,可能需要调整
Cv2.Threshold中的阈值参数以获得更好效果。DLL 文件:
bin\x64\Debug\目录下的OpenCvSharpExtern.dll和opencv_videoio_ffmpeg4130_64.dll为原生 C++ 库,必须与可执行文件在同一目录,否则会报找不到 DLL 的错误。
文件夹结构
FIRC/ ├── Properties/ # 项目属性文件 │ ├── AssemblyInfo.cs # 程序集版本信息 │ ├── Resources.Designer.cs # 资源文件自动生成代码 │ ├── Resources.resx # 资源文件 │ ├── Settings.Designer.cs # 设置文件自动生成代码 │ └── Settings.settings # 应用程序设置 ├── bin/ # 编译输出目录 │ ├── Debug/ # AnyCPU Debug 输出(不使用) │ ├── Release/ # AnyCPU Release 输出(不使用) │ └── x64/ │ └── Debug/ # x64 Debug 输出(主要运行目录) │ ├── dll/x64/ │ │ ├── OpenCvSharpExtern.dll # OpenCvSharp 原生 C++ 库 │ │ └── opencv_videoio_ffmpeg4130_64.dll # FFmpeg 视频库 │ ├── OpenCvSharp.dll # OpenCvSharp 托管库 │ ├── OpenCvSharp.Extensions.dll # OpenCvSharp 扩展库(Mat↔Bitmap转换) │ ├── System.Buffers.dll # 运行时依赖 │ ├── System.Drawing.Common.dll # 绘图库 │ ├── System.Memory.dll # 内存管理库 │ ├── System.Numerics.Vectors.dll # 向量计算库 │ └── System.Runtime.CompilerServices.Unsafe.dll ├── App.config # 应用程序配置文件 ├── FIRC.csproj # 项目文件(MSBuild 配置) ├── FIRC.sln # 解决方案文件 ├── Form1.cs # 主窗体业务逻辑(图像处理与校正算法) ├── Form1.Designer.cs # 主窗体界面布局(控件定义) └── Program.cs # 程序入口源码地址:https://download.csdn.net/download/FL1623863129/90010795