C# OpenCvSharp 基于霍夫变换直线检测的文本图像倾斜校正文本图像倾斜校

项目简介

这是是一个基于 OpenCvSharp 的 Windows 桌面应用程序,用于对倾斜的文本图像进行自动角度检测与校正。程序采用 WinForms 界面,支持用户上传图像,实时显示原始图像与校正后的结果图像,并输出检测到的倾斜角度。


算法原理

本项目采用**基于霍夫直线检测(Hough Line Transform)**的倾斜校正算法,整体处理流程如下:

复制代码
原始图像 → 灰度化 → 二值化 → 形态学膨胀 → 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

安装步骤

  1. 确保已安装 Visual Studio 2019,并勾选".NET 桌面开发"工作负载。

  2. 克隆或下载本项目到本地:

    bash 复制代码
    git clone <仓库地址>
  3. 使用 Visual Studio 打开解决方案文件 FIRC.sln

  4. 在 Visual Studio 顶部工具栏中,将平台切换为 x64 ,配置选择 Debug

  5. 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
  6. 执行一次"生成 → 重新生成解决方案",确认无编译错误。


运行步骤

  1. 在 Visual Studio 中将平台设置为 x64 ,配置选择 Debug ,按 F5 启动程序。

  2. 程序启动后显示主界面,包含两个按钮和两个图像显示区域:

    • 上传图片:使用算法1(霍夫直线检测)进行倾斜校正
    • 上传图片(算法2):预留算法2接口
  3. 点击"上传图片"按钮,在弹出的文件选择对话框中选择一张图像文件(支持 .jpg.jpeg.png.bmp.tif.tiff)。

  4. 程序自动完成图像处理与校正,界面将显示:

    • 左侧:原始图像
    • 右侧:校正结果
    • 顶部标签:检测到的倾斜角度
  5. 如需测试其他图像,直接再次点击按钮重新选择即可。


注意事项

  1. 必须使用 x64 平台编译运行 ,OpenCvSharp 原生库(OpenCvSharpExtern.dll)仅提供 x64 版本,AnyCPU 模式下会抛出 BadImageFormatException

  2. 语法限制:项目严格遵循 C# 6.0 语法规范,禁止使用以下 C# 7.0+ 特性:

    • 字符串插值($"..."
    • 空值条件运算符(?.??=
    • 模式匹配(is/switch 模式)
    • 元组解构
    • 局部函数
  3. 图像要求:算法适用于包含明显水平文本行的图像,背景需与文字有足够对比度。若图像中无直线被检测到,程序会弹出提示。

  4. 二值化阈值 :当前固定阈值为 50,若图像整体偏亮或偏暗,可能需要调整 Cv2.Threshold 中的阈值参数以获得更好效果。

  5. DLL 文件bin\x64\Debug\ 目录下的 OpenCvSharpExtern.dllopencv_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

相关推荐
techdashen2 小时前
在 Fly.io 上使用 Rust 构建远程开发环境:从 Tokio 到 eBPF
开发语言·后端·rust
留白_2 小时前
pandas文件读取与存储
开发语言·python·pandas
夕除2 小时前
AOP 实现 Redis 缓存切面解析
java·开发语言·python
feifeigo1232 小时前
马尔可夫决策过程(MDP)MATLAB 实现
开发语言·matlab
攻城狮Soar2 小时前
STL源码解析之list(1)
开发语言·c++
x***r1512 小时前
Postman-win64-7.3.5-Setup安装配置教程(Windows 详细版)
开发语言·lua
林森lsjs2 小时前
【日耕一题】4. 较为复杂情况下的求和
java·开发语言
2401_869769592 小时前
内容5 日期类实现
开发语言·c++
白露与泡影2 小时前
2026秋招冲刺:1000道Java高频面试题(各大厂考点汇总)
java·开发语言·面试