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

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

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

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

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

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

```cs:title= 使用 IronOCR 快速修复文本颜色 new IronTesseract().Read(new IronOcr.OcrImageInput("sample.jpg").SelectTextColor(new IronSoftware.Drawing.Color("#DB645C"), 60));


<div class="hsg-featured-snippet">
    <h3>最小工作流程(5 个步骤)</h3>
    <ol>
        <li><a class="js-modal-open" data-modal-id="trial-license-after-download" href="https://nuget.org/packages/IronOcr/">下载一个用于校正图像颜色的 C# 库</a></li>
        <li>导入 PDF 文档和图像进行读取</li>
        <li>应用色彩效果:二值化、灰度、反转和色彩替换</li>
        <li>导出校正后的图像以供查看</li>
        <li>使用 <code>SelectTextColor</code> 阅读特定文本颜色</li>
    </ol>
</div>

<br class="clear">

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

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

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

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

二值化技术在处理光照不均匀或背景噪音的扫描文档时表现出色。该算法会分析图像并确定最佳阈值,以分离前景文本和背景。 有关高级预处理技术,请参阅 [OCR 图像优化过滤器指南](https://ironsoftware.com/csharp/ocr/examples/ocr-image-filters-for-net-tesseract/)。

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

```csharp
:path=/static-assets/ocr/content-code-examples/how-to/image-color-correction-binarize-image.cs

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

如何导出和比较结果? 使用 `SaveAsImages` 方法导出修改后的图像。 请比较下面二值化前后的图像。
Sample image with red and black text on blue-gray background showing OCR challenges before binarization
Binarized version showing clear black text on pure white background for optimal OCR processing

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

何时应使用灰度而非其他方法? 使用 `ToGrayScale` 方法应用灰度。 翻译过程中需要计算 R、G 和 B 值的平均值。 如果彩色背景或水印会干扰文本识别,灰度效果会很好。 与二值化不同,灰度可以保留图像中细微变化的细节。 将其用于带有嵌入式文本或复杂布局的照片。 关于低质量扫描,请参阅 [修复低质量扫描和图像](https://ironsoftware.com/csharp/ocr/examples/ocr-low-quality-scans-tesseract/)。

什么是灰度转换的简单代码? ```csharp :path=/static-assets/ocr/content-code-examples/how-to/image-color-correction-grayscale-image.cs ``` 为获得不同的图像质量,请将灰度与其他预处理步骤结合起来。 [OcrInput 类](https://ironsoftware.com/csharp/ocr/examples/csharp-ocr-input-for-iron-tesseract/)文档解释了多个过滤器的连锁。

灰度与原版相比如何?
Sample text with red headers and black body text showing multiple colors before grayscale conversion
Grayscale document with clear text about tech executives, demonstrating improved readability after conversion

何时应反转图像颜色? 反转颜色可增强对比度。将黑底白字转换为白底黑字可以提高可读性。

如何实现颜色反转? 使用 `Invert` 方法反转颜色。 通过布尔值移除颜色通道并返回灰度。 颜色反转可处理负片图像或深色主题截图。 现代应用程序使用暗模式界面,对传统 OCR 提出了挑战。 反转这些图像可确保最佳识别效果。 有关各种图像类型,请参阅[快速 OCR 配置指南](https://ironsoftware.com/csharp/ocr/examples/tune-tesseract-for-speed-in-dotnet/)。 ```csharp :path=/static-assets/ocr/content-code-examples/how-to/image-color-correction-invert-image.cs ``` 对于混合文档类型的批量处理,要实现自动深色背景检测。 [IronOCR中的计算机视觉](https://ironsoftware.com/csharp/ocr/how-to/computer-vision/)功能可识别何时需要反转。

反转选项之间有何区别? 比较有灰度和无灰度的 `Invert` 方法:
Color-inverted document maintaining original color channels with reversed values
Business text with inverted colors showing white text on dark background demonstrating color inversion effect

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

为什么容差在颜色替换中很重要? `ReplaceColor` 方法需要当前颜色、新颜色和公差值。 更高的宽容度可以更好地处理模糊图像。 容差决定了像素与目标颜色的匹配程度。 低值(0-50)适合统一颜色。 较高的数值(100-200)可处理抗锯齿文本或压缩人工痕迹。 这有助于处理因渗墨或纸张纹理而产生差异的扫描文件。

如何实现颜色替换? ```csharp :path=/static-assets/ocr/content-code-examples/how-to/image-color-correction-replace-color.cs ```

如何处理高级颜色替换场景? 在复杂的情况下,可进行连锁多次替换: ```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); ``` 对于复杂的颜色替换,请参阅[图像校正过滤器](https://ironsoftware.com/csharp/ocr/how-to/image-quality-correction/)了解更多预处理技术。

颜色替换的视觉效果如何?
Text sample with orange-red colored names and content on blue background showing original colors before replacement
Document after color replacement showing dark cyan headers replacing original orange-red text

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

色彩宽容度如何影响结果? ```csharp :path=/static-assets/ocr/content-code-examples/how-to/image-color-correction-select-text-color.cs ``` 在使用彩色编码部分的表单、提取高亮文本或阅读特定警告信息时,使用选择性彩色阅读。 关于结构化数据提取,请参阅 [OcrResult 类](https://ironsoftware.com/csharp/ocr/examples/results-objects/) 进行高级处理。

我可以期待从颜色选择中获得哪些输出? OCR 结果只能读取橙色文本:
调试控制台显示 OCR 提取的橙色文本:商业文档中的 MASAYOSHI SON 和 YASUMITSU SHIGETA

如何保存已应用过滤器的修改后 PDF? IronOCR 可保存带或不带过滤器的修改过的 PDF 文件。 `SaveAsSearchablePdf` 方法的第二个参数指定是否应用筛选器保存。

什么是可搜索 PDF 的实现? ```cs :path=/static-assets/ocr/content-code-examples/how-to/image-quality-correction-searchable-pdf.cs ```

何时应该对保存的 PDF 应用筛选器? 在创建更简洁、更易读的文档时应用筛选器。 这有助于存档或在不同设备上共享文档。 请参阅 [通过 OCR 创建可搜索 PDF](https://ironsoftware.com/csharp/ocr/examples/tesseract-create-searchable-pdf/) 了解更多信息。 对于包含表格的复杂文档,请探索 [ 阅读文档中的表格](https://ironsoftware.com/csharp/ocr/examples/read-table-in-document/) 以进行专门提取。 对于大批量处理,请参阅 [Multithreaded Tesseract OCR](https://ironsoftware.com/csharp/ocr/examples/csharp-tesseract-multithreading-for-speed/) 以优化跨多个文档的过滤器应用。

常见问题解答

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

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

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

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

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

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

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

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

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

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

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

IronOCR 包含一个滤镜向导工具,可帮助确定图像的最佳滤镜组合。对于批量处理,您可以将二值化等多个过滤器与其他预处理技术相结合,以实现适合您文档类型的最佳 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,246,844 | 版本: 2025.12 刚刚发布