如何在 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 支援任何程度值進行微調:

  • 90/-270度:橫向轉縱向
  • 180 度:顛倒的文件
  • 270/-90度:縱向到橫向的轉換
  • 小角度 (1-10 度):微小的調整,雖然 deskewing 對於微小的傾斜通常效果較佳

對於來自較舊設備的 掃描文件,請將旋轉與其他預處理步驟結合。

旋轉如何影響 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

如何修正傾斜的影像?

Deskewing 可拉直傾斜或歪斜的影像,修正斜度以確保文字水平對齊。 這可修正在掃描器上歪斜放置的文件或以微小角度拍攝的照片。

使用 Deskew 方法套用抗色偏功能。 傳入一個整數,指定要修正的最大偏斜角度。 較高的值允許更多的修正,但處理速度會變慢,並有可能出現如頁面顛倒等錯誤。 預設的 15 度最大值可有效處理大多數情況。

我應該使用什麼角度值來進行傾斜補正?

最佳傾斜角度取決於文件品質和需求:

對於嚴重偏斜的文件,請結合抗色偏與 影像最佳化篩選器Filter Wizard 可協助找出最佳的預處理步驟。

什麼時候除焦最有效?

Deskewing 在下列情況下效果最佳:

對以下情況較無效果

如何避免過度修正問題?

透過以下方式預防偏斜問題 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 效能?

縮放會影響精確度和速度:

  • Downscaling (低於 100%):處理速度更快,但可能會遺失精細的細節
  • Upscaling (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% 比例下的大小差異
以不同比例渲染的文字並排比較,以 3D 角度顯示 OCR 品質保留

哪些是合併修正的最佳實務?

按此順序進行修正,以獲得最佳效果: 1.Rotation 先針對主要的方向問題 2.Deskewing 微調對齊方式 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 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。

審核人
Jeff Fritz
Jeffrey T. Fritz
首席計畫經理 - .NET 社群團隊
Jeff 也是 .NET 和 Visual Studio 團隊的首席計畫經理。他是 .NET Conf 虛擬會議系列的執行製作人,並主持「Fritz and Friends」開發人直播串流,每週播出兩次,與觀眾一起討論技術和編寫程式碼。Jeff 為 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP Summit 等大型 Microsoft 開發人員活動撰寫工作坊、簡報和規劃內容。
準備好開始了嗎?
Nuget 下載 5,384,824 | 版本: 2026.2 剛剛發布