如何在 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 處理做好圖片預備工作。

  1. using NuGet 套件管理員安裝 https://www.nuget.org/packages/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 度):僅需微調,但對於輕微傾斜的情況,通常使用校正功能效果更佳

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

旋轉如何影響 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 度最大值足以有效應對多數情境。

校正傾斜時應使用哪些角度值?

最佳的傾斜校正角度取決於文件品質與需求:

  • 預設 (無參數):自動偵測多數文件
  • 5-15 度:略微傾斜的掃描,在準確性與速度之間取得平衡
  • 15-30 度:嚴重傾斜的文件; 角度超過 20 度時請考慮旋轉
  • 30+ 度:可能糾正過度; 改用影像濾鏡

對於嚴重傾斜的文件,請將校正功能與影像優化濾鏡結合使用。 "篩選精靈"可協助識別最佳的前置處理步驟。

何時進行傾斜校正最為有效?

校正功能在以下情況下效果最佳:

  • 文字量大且帶有清晰水平線的文件
  • 表單與結構化文件
  • 書籍或雜誌的掃描頁面
  • 具有一致傾斜角度的多頁 TIFF 檔案
  • 需要精確對齊的財務文件

較不適用於:

  • 基線不規則的手寫文字
  • 包含多種文字方向的圖片
  • 包含大量圖形或表格的文件
  • 已正確對齊的螢幕截圖

如何避免過度修正的問題?

透過以下方式避免傾斜校正問題:

  1. 從保守的角度限制開始(10-15 度)
  2. 使用 OcrResult 信心分數來驗證修正結果
  3. 針對複合性問題,在旋轉後進行傾斜校正
  4. 批次處理前測試範例文件
  5. 針對大量批次使用進度追蹤
  6. 為長時間執行的操作實作中止標記
: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')。 請使用 ScaleCropArea 以在縮放時保留原始 DPI 元資料。 縮放時會維持長寬比,以避免文字變形。

最佳縮放比例是多少?

最佳縮放效果取決於原始解析度與 OCR 需求:

  • 50-80%:高解析度掃描檔(600+ DPI),以加快處理速度
  • 100%:無縮放,原始尺寸
  • 120-150%:低解析度圖片,用於提升文字辨識效果
  • 200%+:文字非常小,但調整 DPI 設定可能會有更好的效果

建議目標文字高度設定為 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% 比例下的對比圖,以展示尺寸差異
以 3D 視角呈現不同縮放比例下渲染文字的並列比較,展示 OCR 品質的保留程度

綜合修正的最佳實踐有哪些?

為獲得最佳效果,請依此順序進行修正:

  1. 針對主要方向性問題,優先進行旋轉調整
  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

哪些額外的預處理步驟能改善結果?

除了修正語序外,請考慮以下改進:

針對批次處理,請實作非同步支援以高效處理多份文件。 針對大型操作,請設定超時機制以監控處理進度。

如何匯出修正後的圖片?

匯出處理後的影像以供驗證或進一步使用:

在實施複雜工作流程之前,請先使用簡單的單行 OCR 進行修正測試。

常見問題

在進行 OCR 處理前,該如何修正傾斜或變形的圖片?

IronOCR 透過其 OcrInput 類別提供強大的影像方向校正功能。您可以串接 Rotate()、Deskew() 和 Scale() 等方法,來修正傾斜的掃描檔、倒置的文件以及尺寸不當的影像。例如,使用 input.Rotate(90).Deskew(45).Scale(150) 即可在文字擷取前,於單一行中執行多項校正。

針對不同的文件方向,我應該使用哪些旋轉角度?

IronOCR 支援任何旋轉角度,但常見的設定值包括:橫向轉為縱向時為 90 度、倒置文件時為 180 度,以及縱向轉為橫向時為 270 度。若需微調(1 至 10 度),建議改用 IronOCR 的 Deskew() 方法,以針對略微傾斜的文件獲得更佳效果。

我可以自動偵測文件的正確方向嗎?

是的,IronOCR 包含一個 DetectPageOrientation 方法,可透過文字分析自動判定正確的頁面方向。此功能在處理頁面方向不一致的批次文件時特別有用,例如歷史檔案或來自不同來源的多頁文件。

在進行影像校正時,何時該使用傾斜校正(deskewing),何時又該使用旋轉(rotation)?

當文件完全橫向或倒置時,請使用 IronOCR 的 Rotate() 方法處理主要方向問題(90、180、270 度)。對於掃描文件中常見的輕微傾斜與歪斜,請使用 Deskew() 方法。您可以將這兩種方法串接使用,以全面修正掃描品質不佳的影像。

如何調整圖片大小以提升 OCR 辨識準確度?

IronOCR 的 Scale() 方法可讓您以百分比調整圖片大小。例如,Scale(150) 會將圖片尺寸放大 50%,這能提升低解析度掃描檔的 OCR 準確度。此功能若與旋轉及校正功能結合,進行全面的圖片預處理時,將特別有用。

IronOCR 是否支援多種語言?

IronOCR 支援多種語言,使其成為適用於需要識別不同語言文字的全球應用程式的多功能工具。

IronOCR 能否整合至現有應用程式中?

IronOCR 設計上可輕鬆透過 C# 整合至現有應用程式中,讓開發人員能以最少的努力,為其軟體增添 OCR 功能。

使用 IronOCR 進行文件管理有哪些好處?

使用 IronOCR 進行文件管理,可將掃描文件轉換為可搜尋且可編輯的文字,從而簡化工作流程,減少人工資料輸入的需求,並提升文件的可存取性。

IronOCR 如何提升資料準確性?

IronOCR 透過其先進的辨識演算法與影像校正功能來提升資料準確性,確保文字擷取過程既可靠又精確。

IronOCR 是否有提供免費試用版?

是的,Iron Software 提供 IronOCR 的免費試用版,讓使用者能在決定購買前測試其功能與效能。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 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 Summit 等微軟最大規模的開發者活動規劃內容。
準備開始了嗎?
Nuget 下載 5,888,303 | 版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎? PM > Install-Package IronOcr
執行範例 觀看您的圖片轉為可搜尋文字。