工具介绍
最近基于OpenCV和C#做了一个扫描文件纠偏工具
界面效果

调整锚点

项目概述
这是一个基于C# WinForms开发的扫描文档校正工具,用于自动检测并校正扫描文档的倾斜和透视变形,支持批量处理和手动调整功能。
技术栈
-
开发语言:C#
-
框架:.NET Windows Forms
-
图像处理库:EMGU.CV 3.3.0(基于OpenCV的.NET封装)
-
其他库:ZedGraph 5.1.5(图表控件)
核心功能
1. 文档自动校正
-
自动检测角点 :使用OpenCV的
MinAreaRect算法自动检测文档的四个角点 -
透视校正:基于检测到的四个角点进行透视变换,将倾斜或变形的文档校正为矩形
-
方向归一化:自动识别文档方向并调整为竖直方向
2. 手动调整功能
-
角点手动设置:支持通过点击图片手动设置四个角点
-
角点拖动调整:可直接拖动角点进行微调
-
旋转功能:支持顺时针和逆时针旋转文档
-
边框绘制:可预览校正后的文档边框
3. 批量处理
-
文件夹扫描:支持扫描指定文件夹中的图片文件(支持JPG、JPEG、PNG、BMP、TIF、TIFF格式)
-
队列处理:使用有界队列管理待处理文件
-
缓存机制:校正后的图片先保存到缓存,再归档到目标文件夹
-
进度显示:实时显示处理进度
4. 图片预览与管理
-
前后对比:同时显示原始图片和校正后的图片
-
双击放大:支持双击图片进行全屏预览
-
归档功能:将校正后的图片保存到指定目标文件夹
-
资源管理:自动释放图片资源,避免内存泄漏
项目结构
主要文件
入口与主界面
-
Program.cs:程序入口点 -
MainForm.cs:主窗口,提供文件夹选择和处理控制
用户控件
-
UCListPic.cs:图片列表控件,管理多个UCPic控件 -
UCPic.cs:单个图片控件,显示原始图片和校正后的图片
表单
-
FormSettingPicFixedPoint.cs:角点设置表单,支持手动调整角点 -
FormPicImage.cs:图片预览表单,支持双击放大查看
核心工具类
-
DocumentCorrector.cs:文档校正核心类,负责自动检测角点和方向归一化 -
FourPointPerspectiveCorrector.cs:四点透视校正类,负责透视变换 -
SystemSetting.cs:系统设置类,管理应用程序配置和文件夹路径
数据模型
-
ImageFileInfo.cs:图片文件信息类,封装图片路径、状态和角点信息 -
FileStatusEnum.cs:文件状态枚举,定义文件处理状态
工作流程
-
选择源文件夹和目标文件夹
-
扫描源文件夹中的图片文件
-
自动检测每个图片的四个角点
-
进行透视校正并生成预览
-
用户可选择手动调整角点或旋转图片
-
将校正后的图片归档到目标文件夹
-
处理完成后显示完成状态
关键技术亮点
-
高效的图像处理:使用EMGU.CV库进行高性能图像处理
-
内存优化:采用流式文件枚举和有界队列,避免内存溢出
-
线程安全:使用线程同步机制确保UI线程和工作线程安全通信
-
资源管理:完善的资源释放机制,避免内存泄漏
-
用户友好界面:直观的操作界面和实时预览功能
总结
该项目是一个功能完整、性能稳定的扫描文档校正工具,适用于需要批量处理扫描文档的场景。它结合了自动检测和手动调整功能,既提高了处理效率,又保证了校正质量。项目结构清晰,代码组织合理,便于维护和扩展。