如何在 C# 中纠正 OCR 图像方向 | IronOCR

使用 C# 修正 OCR 中的图像方向

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR 通过旋转、纠偏和缩放等方法修复图像方向问题。 在您的 .NET 应用程序中,利用这些转换来纠正倾斜的扫描、倒置的文档和尺寸不当的图像,从而实现准确的 OCR 文本提取。

快速入门:一行完成旋转、桌面倾斜和缩放

链入 IronOCR 的 OcrInput 方法,只需一次调用即可旋转、纠偏和缩放图像--无需模板即可为准确的 OCR 准备图像。

Nuget Icon立即开始使用 NuGet 创建 PDF 文件:

  1. 使用 NuGet 包管理器安装 IronOCR

    PM > Install-Package IronOcr

  2. 复制并运行这段代码。

    var result = new IronOcr.OcrInput().LoadImage("skewed.png").Rotate(90).Deskew(45).Scale(150).Let(input => new IronOcr.IronTesseract().Read(input));
  3. 部署到您的生产环境中进行测试

    立即开始在您的项目中使用 IronOCR,免费试用!
    arrow pointer


如何在 IronOCR 中旋转图像?

旋转可按特定角度改变图像方向,以确保文本直立并正确对齐。 这可以纠正扫描仪上错误放置的扫描文件或角度不佳的照片。

Rotate 方法传递一个度值。 正值顺时针旋转,负值逆时针旋转。旋转围绕图像中心点进行,在调整内容方向的同时保持原始尺寸。

何时应使用图像旋转?

图像旋转可以纠正以不正确方向扫描或拍摄的文档。 常见情况包括

对于自动旋转检测,请使用 IronOCR 的 DetectPageOrientation 方法,该方法可通过文本分析确定正确的方向。

什么程度的数值效果最好?

常见的旋转值是 90 度的倍数(90、180、270),用于标准方向问题。 IronOCR 支持任意度值的微调:

对于来自旧设备的扫描文件,应将旋转与其他预处理步骤结合起来。

旋转如何影响 OCR 精确度?

适当的旋转对于 OCR 的准确性至关重要。 IronOCR 的 Tesseract 5 引擎要求从左到右、从上到下的文本流。 文本错位的原因:

:path=/static-assets/ocr/content-code-examples/how-to/image-orientation-correction-rotate-image.cs
using IronOcr;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Add image
using var imageInput = new OcrImageInput("paragraph_skewed.png");

// Rotate the image 180 degrees clockwise
imageInput.Rotate(180);

// Export the modified image
imageInput.SaveAsImages("rotate");
Imports IronOcr

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Add image
Private imageInput = New OcrImageInput("paragraph_skewed.png")

' Rotate the image 180 degrees clockwise
imageInput.Rotate(180)

' Export the modified image
imageInput.SaveAsImages("rotate")
$vbLabelText   $csharpLabel

使用 SaveAsImages 方法导出修改后的图像。 下图是旋转前后的图像。

Original skewed text document before rotation correction
Document with 180-degree rotated text showing upside-down content that requires IronOCR rotation correction

如何对倾斜的图像进行纠偏?

纠偏可以拉直倾斜或歪斜的图像,纠正斜度以确保水平文本对齐。 这可以解决文件在扫描仪上歪斜放置或照片拍摄角度过小的问题。

使用 Deskew 方法应用纠偏。 传递一个整数,指定要纠正的最大偏斜角度。 较高的值允许更多的修正,但处理速度较慢,并可能出现页面颠倒等错误。 默认的 15 度最大值可以有效处理大多数情况。

纠偏时应使用哪些角度值?

最佳纠偏角度取决于文档质量和要求:

对于严重倾斜的文档,可将纠偏与图像优化过滤器结合使用。 Filter Wizard 可帮助确定最佳预处理步骤。

何时纠偏最有效?

脱稿效果最佳:

对以下情况效果较差

如何避免过度校正问题?

通过以下方法防止出现纠偏问题 1.从保守的角度限制(10-15 度)开始 2.使用 OcrResult 信心分数 验证更正 3.旋转后应用纠偏处理复合问题 4.在批量处理前测试样本文件 5.使用进度跟踪进行大批量工作 6.为长期运行的操作实施 中止令牌</a

:path=/static-assets/ocr/content-code-examples/how-to/image-orientation-correction-rotate-image.cs
using IronOcr;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Add image
using var imageInput = new OcrImageInput("paragraph_skewed.png");

// Rotate the image 180 degrees clockwise
imageInput.Rotate(180);

// Export the modified image
imageInput.SaveAsImages("rotate");
Imports IronOcr

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Add image
Private imageInput = New OcrImageInput("paragraph_skewed.png")

' Rotate the image 180 degrees clockwise
imageInput.Rotate(180)

' Export the modified image
imageInput.SaveAsImages("rotate")
$vbLabelText   $csharpLabel
Original document with noticeable tilt requiring deskew correction
Document after deskew correction showing properly aligned horizontal text

如何缩放图像以获得更好的 OCR 效果?

缩放调整图像大小,使尺寸标准化,从而实现一致的文本识别。 适当的缩放可确保文本既不会太小而无法准确检测,也不会太大而无法有效处理。

使用 Scale 方法以百分比值(100% 表示无影响)进行缩放。 第二个参数,ScaleCropArea,决定作物区域是否按比例缩放(建议使用 "true")。 缩放保持宽高比,防止文本失真。

最佳规模百分比是多少?

最佳缩放取决于源分辨率和 OCR 要求:

为达到最佳效果,文本高度应为 20-30 像素。 请参阅为 Tesseract 优化图像 DPI,了解有关分辨率优化的详细指导。

扩展如何影响 OCR 性能?

缩放会影响准确性和速度:

  • 缩放(低于 100% ):处理速度更快,但可能会丢失精细细节
  • 放大(100% 以上):小文本的准确性更高,但处理速度较慢
  • 内存使用量:与图像尺寸成四次方扩展
  • 处理时间:尺寸越大,处理时间越长

有关性能优化,请参阅快速 OCR 配置提高速度的多线程

何时使用 ScaleCropArea?

在下列情况下使用 ScaleCropArea

设置为 true 除非您需要原始裁剪坐标。

:path=/static-assets/ocr/content-code-examples/how-to/image-orientation-correction-rotate-image.cs
using IronOcr;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Add image
using var imageInput = new OcrImageInput("paragraph_skewed.png");

// Rotate the image 180 degrees clockwise
imageInput.Rotate(180);

// Export the modified image
imageInput.SaveAsImages("rotate");
Imports IronOcr

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Add image
Private imageInput = New OcrImageInput("paragraph_skewed.png")

' Rotate the image 180 degrees clockwise
imageInput.Rotate(180)

' Export the modified image
imageInput.SaveAsImages("rotate")
$vbLabelText   $csharpLabel

如何比较不同的刻度值?

下面的对比显示了缩放对尺寸和文字清晰度的影响。 适度缩放可保持可读性,同时调整处理要求:

对比显示文本文档在 50%、100% 和 150% 比例下的大小差异
以不同比例渲染的文本并排对比,显示三维视角下的 OCR 质量保留

哪些是合并更正的最佳实践?

按此顺序进行修正,以获得最佳效果: 1.Rotation 先解决主要方向问题 2.纠偏以微调对齐度 3.扩展以优化 OCR 处理

这样的顺序可确保每次更正都是在前一次更正的基础上进行的,而不会出现复合错误。 对于复杂的处理需求,请探索 IronOCR 的综合图像过滤器和图像质量校正工具

如何合并所有方向更正?

链式多重校正,全面准备图像:

/* :path=/static-assets/ocr/content-code-examples/how-to/image-orientation-correction-combined.cs */
using IronOcr;

// Create OCR engine with optimized configuration
IronTesseract ocrTesseract = new IronTesseract();

// Load and process image with all corrections
using var imageInput = new OcrImageInput("skewed_document.png");

// Apply corrections in optimal sequence
imageInput
    .Rotate(90)           // Fix major orientation
    .Deskew(15)          // Correct minor tilts
    .Scale(150, true);   // Enhance for OCR

// Perform OCR on corrected image
OcrResult result = ocrTesseract.Read(imageInput);

// Access extracted text
string extractedText = result.Text;
/* :path=/static-assets/ocr/content-code-examples/how-to/image-orientation-correction-combined.cs */
using IronOcr;

// Create OCR engine with optimized configuration
IronTesseract ocrTesseract = new IronTesseract();

// Load and process image with all corrections
using var imageInput = new OcrImageInput("skewed_document.png");

// Apply corrections in optimal sequence
imageInput
    .Rotate(90)           // Fix major orientation
    .Deskew(15)          // Correct minor tilts
    .Scale(150, true);   // Enhance for OCR

// Perform OCR on corrected image
OcrResult result = ocrTesseract.Read(imageInput);

// Access extracted text
string extractedText = result.Text;
Imports IronOcr

' Create OCR engine with optimized configuration
Dim ocrTesseract As New IronTesseract()

' Load and process image with all corrections
Using imageInput As New OcrImageInput("skewed_document.png")

    ' Apply corrections in optimal sequence
    imageInput _
        .Rotate(90) _          ' Fix major orientation
        .Deskew(15) _          ' Correct minor tilts
        .Scale(150, True)      ' Enhance for OCR

    ' Perform OCR on corrected image
    Dim result As OcrResult = ocrTesseract.Read(imageInput)

    ' Access extracted text
    Dim extractedText As String = result.Text
End Using
$vbLabelText   $csharpLabel

哪些额外的预处理可以提高结果?

除了方向校正外,还需考虑这些增强功能:

对于批处理,请实施 async 支持,以高效处理多个文档。 使用超时监控处理大型操作。

如何导出校正后的图像?

导出处理过的图像,以供验证或进一步使用:

在实施复杂的工作流程之前,使用 简单的单行 OCR 测试更正。

常见问题解答

如何在 OCR 处理之前修复倾斜或歪斜的图像?

IronOCR 通过其 OcrInput 类提供强大的图像方向校正功能。你可以使用 Rotate()、Deskew() 和 Scale() 等方法来修复倾斜的扫描、倒置的文档和大小不合适的图像。例如,使用 input.Rotate(90).Deskew(45).Scale(150) 可以在文本提取前在一行中应用多个校正方法。

不同的文档方向应该使用什么旋转角度?

IronOCR 支持任何旋转角度,但常用值包括90 度用于横向到纵向的转换,180 度用于倒置文档,270 度用于纵向到横向的转换。对于微小的调整(1-10 度),可以考虑使用 IronOcr 的 Deskew() 方法来代替,以便在文档略微倾斜时获得更好的效果。

我可以自动检测文档的正确方向吗?

是的,IronOCR 包含一个 DetectPageOrientation 方法,可以通过文本分析自动确定正确的方向。在处理方向不一致的成批文档(如历史档案或来自不同来源的多页文档)时,该功能尤其有用。

什么时候应该使用纠偏而不是旋转来校正图像?

当文档完全侧翻或颠倒时,使用 IronOCR 的 Rotate() 方法来解决主要方向问题(90、180、270 度)。使用 Deskew() 方法可解决扫描文档中常见的轻微倾斜和歪斜问题。您可以将这两种方法串联起来,对扫描效果不佳的图像进行全面修正。

如何缩放图像以提高 OCR 的准确性?

IronOCR 的 Scale() 方法允许您按百分比调整图片大小。例如,Scale(150) 可将图像大小增加 50%,从而提高低分辨率扫描的 OCR 精确度。在结合旋转和纠偏进行全面图像预处理时,这种方法尤其有用。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

审核者
Jeff Fritz
Jeffrey T. Fritz
首席项目经理 - .NET 社区团队
Jeff 也是 .NET 和 Visual Studio 团队的首席项目经理。他是 .NET Conf 虚拟会议系列的执行制片人,并主持“Fritz and Friends”直播节目,每周两次与观众一起谈论技术并编写代码。Jeff 撰写研讨会、演示文稿并计划包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP 峰会在内的最大型微软开发者活动的内容。
准备开始了吗?
Nuget 下载 5,384,824 | 版本: 2026.2 刚刚发布