如何在 C# 中修复图像颜色以进行读取 | IronOCR

如何修复图像颜色以便在 C# 中阅读

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

using IronOCR 的二值化、灰度、反转和颜色替换方法在 C# 中修复图像颜色,以提高文本可读性和 OCR 准确性。 阅读特定的文本颜色,进行有针对性的提取。

快速入门:隔离特定文本颜色

using IronOCR 的 SelectTextColor 方法专注于特定文本颜色的 OCR,无需复杂的图像处理。 加载图像,选择文本颜色和容差,然后只提取文本以获得准确的 OCR 结果。

  1. 使用 NuGet 包管理器安装 https://www.nuget.org/packages/IronOcr

    PM > Install-Package IronOcr
  2. 复制并运行这段代码。

    new IronTesseract().Read(new IronOcr.OcrImageInput("sample.jpg").SelectTextColor(new IronSoftware.Drawing.Color("#DB645C"), 60));
  3. 部署到您的生产环境中进行测试

    通过免费试用立即在您的项目中开始使用IronOCR

    arrow pointer


如何对图像进行二值化以改进 OCR?

二值化将图像转换为双色格式,通常是黑白图像。这样可以将文本与背景分开并减少噪音,使文本更加清晰易读。

为什么二值化可以提高 OCR 精度?

using Binarize 方法应用二值化。 OCR 对于白底黑字的高对比度图像效果最佳。 这种方法可以明确区分背景和字符。

二值化技术在处理光照不均匀或背景噪音的扫描文档时表现出色。该算法会分析图像并确定最佳阈值,以分离前景文本和背景。 有关高级预处理技术,请参阅 OCR 图像优化过滤器指南

二值化的代码实现是什么?

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

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

// Add image
using var imageInput = new OcrImageInput("sample.jpg");
// Apply binarize affect
imageInput.Binarize();

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

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Add image
Private imageInput = New OcrImageInput("sample.jpg")
' Apply binarize affect
imageInput.Binarize()

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

对于批量处理,请将二值化与其他过滤器结合起来。 使用 滤镜向导 确定图像的最佳滤镜组合。

如何导出和比较结果?

using SaveAsImages 方法导出修改后的图像。 请比较下面二值化前后的图像。

蓝灰色背景上带红黑文本的示例图像,展示二值化之前的 OCR 挑战
二值化版本,在纯白背景上显示清晰的黑色文本,以实现最佳 OCR 处理

如何将图像转换为灰度以便更好地阅读?

将图像转换为灰度可减少视觉干扰,提高可读性。 当原始颜色分散内容注意力时,这将有所帮助。

何时应使用灰度而非其他方法?

using ToGrayScale 方法应用灰度。 翻译过程中需要计算 R、G 和 B 值的平均值。

如果彩色背景或水印会干扰文本识别,灰度效果会很好。 与二值化不同,灰度可以保留图像中细微变化的细节。 将其用于带有嵌入式文本或复杂布局的照片。 关于低质量扫描,请参阅 修复低质量扫描和图像

什么是灰度转换的简单代码?

:path=/static-assets/ocr/content-code-examples/how-to/image-color-correction-grayscale-image.cs
// Apply grayscale affect
imageInput.ToGrayScale();
' Apply grayscale affect
imageInput.ToGrayScale()
$vbLabelText   $csharpLabel

为获得不同的图像质量,请将灰度与其他预处理步骤结合起来。 OcrInput 类文档解释了多个过滤器的连锁。

灰度与原版相比如何?

带红色标题和黑色正文的示例文本,展示灰度转换之前的多种颜色
带有关于科技高管清晰文本的灰度文档,展示转换后可读性的提高

何时应反转图像颜色?

反转颜色可增强对比度。将黑底白字转换为白底黑字可以提高可读性。

如何实现颜色反转?

利用 Invert 方法反转颜色。 通过布尔值移除颜色通道并返回灰度。

颜色反转可处理负片图像或深色主题截图。 现代应用程序使用暗模式界面,对传统 OCR 提出了挑战。 反转这些图像可确保最佳识别效果。 有关各种图像类型,请参阅快速 OCR 配置指南

:path=/static-assets/ocr/content-code-examples/how-to/image-color-correction-invert-image.cs
// Apply invert affect
imageInput.Invert();
' Apply invert affect
imageInput.Invert()
$vbLabelText   $csharpLabel

对于混合文档类型的批量处理,要实现自动深色背景检测。 IronOCR中的计算机视觉功能可识别何时需要反转。

反转选项之间有何区别?

对比 Invert 方法在有无灰度处理时的效果:

颜色反转的文档,保留原始颜色通道但值被反转
反色的商业文本,在深色背景上显示白色文本,展示颜色反转效果

如何替换图像中的特定颜色?

替换特定颜色以突出或淡化元素。 利用这一点来提高文本的突出度或纠正有问题的对比度。

为什么容差在颜色替换中很重要?

ReplaceColor 方法需要当前颜色、新颜色和宽容值。 更高的宽容度可以更好地处理模糊图像。

容差决定了像素与目标颜色的匹配程度。 低值(0-50)适合统一颜色。 较高的数值(100-200)可处理抗锯齿文本或压缩人工痕迹。 这有助于处理因渗墨或纸张纹理而产生差异的扫描文件。

如何实现颜色替换?

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

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

// Add image
using var imageInput = new OcrImageInput("sample.jpg");
IronSoftware.Drawing.Color currentColor = new IronSoftware.Drawing.Color("#DB645C");
IronSoftware.Drawing.Color newColor = IronSoftware.Drawing.Color.DarkCyan;

// Replace color
imageInput.ReplaceColor(currentColor, newColor, 80);

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

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Add image
Private imageInput = New OcrImageInput("sample.jpg")
Private currentColor As New IronSoftware.Drawing.Color("#DB645C")
Private newColor As IronSoftware.Drawing.Color = IronSoftware.Drawing.Color.DarkCyan

' Replace color
imageInput.ReplaceColor(currentColor, newColor, 80)

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

如何处理高级颜色替换场景?

在复杂的情况下,可进行连锁多次替换:

:path=/static-assets/ocr/content-code-examples/how-to/image-color-correction-6.cs
/* :path=/static-assets/ocr/content-code-examples/how-to/image-color-correction-multiple-replacements.cs */
// Replace multiple colors in sequence
using var imageInput = new OcrImageInput("multi-color-document.jpg");

// Replace red text with black
imageInput.ReplaceColor(IronSoftware.Drawing.Color.Red, IronSoftware.Drawing.Color.Black, 70);

// Replace blue headers with dark gray
imageInput.ReplaceColor(IronSoftware.Drawing.Color.Blue, IronSoftware.Drawing.Color.DarkGray, 60);

// Replace light yellow background with white
imageInput.ReplaceColor(new IronSoftware.Drawing.Color("#FFFACD"), IronSoftware.Drawing.Color.White, 40);

// Perform OCR on the cleaned image
var result = ocrTesseract.Read(imageInput);
Imports IronSoftware.Drawing

' Replace multiple colors in sequence
Using imageInput As New OcrImageInput("multi-color-document.jpg")

    ' Replace red text with black
    imageInput.ReplaceColor(Color.Red, Color.Black, 70)

    ' Replace blue headers with dark gray
    imageInput.ReplaceColor(Color.Blue, Color.DarkGray, 60)

    ' Replace light yellow background with white
    imageInput.ReplaceColor(New Color("#FFFACD"), Color.White, 40)

    ' Perform OCR on the cleaned image
    Dim result = ocrTesseract.Read(imageInput)

End Using
$vbLabelText   $csharpLabel

对于复杂的颜色替换,请参阅图像校正过滤器了解更多预处理技术。

颜色替换的视觉效果如何?

蓝色背景上带橙红色名称和内容的文本样本,展示替换之前的原始颜色
Document after color replacement showing dark cyan headers replacing original orange-red text

如何只阅读特定颜色的文本?

using SelectTextColor 方法读取特定文本颜色。 指定目标颜色和容差(0-255)。 容差表示像素与所选颜色之间在 R、G 和 B 值上的允许差异。

色彩宽容度如何影响结果?

:path=/static-assets/ocr/content-code-examples/how-to/image-color-correction-select-text-color.cs
using IronOcr;
using System;

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

// Add image
using var imageInput = new OcrImageInput("sample.jpg");
// Text color to focus on
IronSoftware.Drawing.Color focusColor = new IronSoftware.Drawing.Color("#DB645C");

// Specify which text color to read
imageInput.SelectTextColor(focusColor, 60);

// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Output result to console
Console.WriteLine(ocrResult.Text);
Imports IronOcr
Imports System

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Add image
Private imageInput = New OcrImageInput("sample.jpg")
' Text color to focus on
Private focusColor As New IronSoftware.Drawing.Color("#DB645C")

' Specify which text color to read
imageInput.SelectTextColor(focusColor, 60)

' Perform OCR
Dim ocrResult As OcrResult = ocrTesseract.Read(imageInput)

' Output result to console
Console.WriteLine(ocrResult.Text)
$vbLabelText   $csharpLabel

在使用彩色编码部分的表单、提取高亮文本或阅读特定警告信息时,使用选择性彩色阅读。 关于结构化数据提取,请参阅 OcrResult 类 进行高级处理。

我可以期待从颜色选择中获得哪些输出?

OCR 结果只能读取橙色文本:

调试控制台显示 OCR 提取的橙色文本:商务文档中的 MASAYOSHI SON 和 YASUMITSU SHIGETA

如何保存已应用过滤器的修改后 PDF?

IronOCR 可保存带或不带过滤器的修改过的 PDF 文件。 SaveAsSearchablePdf 方法的第二个参数指定是否在保存时应用过滤器。

什么是可搜索 PDF 的实现?

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

// Create OCR engine: filters are applied at the OcrInput level, so no configuration changes are needed here
var ocr = new IronTesseract();
var ocrInput = new OcrInput();

// Load the scanned PDF as the OCR source
ocrInput.LoadPdf("invoice.pdf");

// Convert to grayscale: removes color noise that can reduce OCR accuracy on color-printed documents
ocrInput.ToGrayScale();
// Run OCR on the preprocessed input
OcrResult result = ocr.Read(ocrInput);

// Write the searchable PDF; true = embed the grayscale-filtered image rather than the original color scan
result.SaveAsSearchablePdf("outputGrayscale.pdf", true);
Imports IronOcr

' Create OCR engine: filters are applied at the OcrInput level, so no configuration changes are needed here
Dim ocr As New IronTesseract()
Dim ocrInput As New OcrInput()

' Load the scanned PDF as the OCR source
ocrInput.LoadPdf("invoice.pdf")

' Convert to grayscale: removes color noise that can reduce OCR accuracy on color-printed documents
ocrInput.ToGrayScale()
' Run OCR on the preprocessed input
Dim result As OcrResult = ocr.Read(ocrInput)

' Write the searchable PDF; True = embed the grayscale-filtered image rather than the original color scan
result.SaveAsSearchablePdf("outputGrayscale.pdf", True)
$vbLabelText   $csharpLabel

何时应该对保存的 PDF 应用筛选器?

在创建更简洁、更易读的文档时应用筛选器。 这有助于存档或在不同设备上共享文档。 请参阅 通过 OCR 创建可搜索 PDF 了解更多信息。

对于包含表格的复杂文档,请探索 阅读文档中的表格 以进行专门提取。 对于大批量处理,请参阅 Multithreaded Tesseract OCR 以优化跨多个文档的过滤器应用。

常见问题解答

如何解决影响 OCR 准确性的图像色彩不佳问题?

IronOCR 提供多种颜色校正方法,包括二值化、灰度转换、反转和颜色替换。这些过滤器通过增强文本与背景之间的对比度来提高文本的可读性,使 OCR 引擎更容易从色彩质量较差的图像中准确提取文本。

什么是二值化,何时应将其用于 OCR?

二值化使用 IronOCR 的二值化方法将图像转换为双色格式(通常为黑白)。该方法通过分析图像并确定最佳分离阈值,可清晰区分文本和背景,对于光照不均匀或背景噪点较多的扫描文档尤为有效。

如何从图像中只提取特定颜色的文本?

IronOCR 的 SelectTextColor 方法可让您将 OCR 的重点放在特定文本颜色上,而无需进行复杂的图像处理。只需指定目标颜色和容差水平--例如,SelectTextColor(new IronSoftware.Drawing.Color("#DB645C"), 60) --即可只提取该颜色范围内的文本。

何时应将图像转换为灰度图像,而不是使用二值化?

在处理干扰文本识别的彩色背景或水印时,请使用 IronOCR 的 ToGrayScale 方法。与二值化不同,灰度保留了具有微妙变化的图像细节,因此在需要保持图像质量的同时减少视觉干扰时非常理想。

我能否导出校正后的图像以查看滤色器的效果?

是的,IronOCR 提供了 SaveAsImages 方法,用于导出应用色彩校正后修改的图像。这样您就可以比较前后的结果,帮助您确定哪种色彩校正方法最适合您的特定图像。

如何确定图像的最佳色彩校正滤镜?

IronOCR 包含一个滤镜向导工具,可帮助确定图像的最佳滤镜组合。对于批量处理,您可以将二值化等多个过滤器与其他预处理技术相结合,以实现适合您文档类型的最佳 OCR 结果。

IronOCR可以集成到现有应用程序中吗?

IronOCR设计为易于使用C#集成到现有应用程序中,允许开发人员以最小的努力为他们的软件添加OCR功能。

使用IronOCR进行文档管理有什么好处?

使用IronOCR进行文档管理可以通过将扫描的文档转换为可搜索和可编辑文本来简化工作流程,减少手动数据输入的需要,提高文档可访问性。

IronOCR如何提高数据准确性?

IronOCR通过其高级识别算法和图像校正功能提高数据准确性,确保文本提取过程既可靠又精确。

IronOCR 有免费试用版吗?

是的,Iron Software 提供IronOCR 的免费试用,使用户在做出购买决定之前可以测试其功能和能力。

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 下载 6,136,090 | 版本: 2026.7 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据? PM > Install-Package IronOcr
运行示例 观看您的图像变成可搜索文本。