C#如何从图片文件中提取文字

来源:网络学院作者:澳门程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《C#如何从图片文件中提取文字》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#如何从图片文件中提取文字》有用,将其分享出去将是对创作者最好的鼓励。

在C#项目中实现图片文件文字提取,最常用的是结合Tesseract OCR引擎完成,该引擎开源免费且支持多语言识别,能够满足大部分场景的文字提取需求。下面将从环境准备到完整实现逐步说明具体步骤。

C#如何从图片文件中提取文字

环境准备

首先需要安装对应的NuGet包和语言数据文件,具体步骤如下:

  • 在Visual Studio的NuGet包管理器中搜索并安装Tesseract包,当前稳定版本为5.2.0
  • 下载Tesseract的语言数据文件,中文识别需要下载chi_sim.traineddata,英文识别需要eng.traineddata,文件可以从官方仓库获取
  • 将下载的语言数据文件放到项目的tessdata目录下,并设置文件属性为“始终复制”到输出目录

核心实现代码

以下是完整的图片文字提取示例代码,包含初始化引擎、加载图片、执行识别、获取结果的全流程:

using System;
using System.IO;
using Tesseract;

namespace OcrDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 图片文件路径
            string imagePath = @"D:test_image.png";
            // 语言数据目录,对应项目中的tessdata文件夹
            string tessDataPath = @"./tessdata";
            // 识别语言,chi_sim代表简体中文,eng代表英文,多个语言用+连接
            string language = "chi_sim+eng";

            try
            {
                // 初始化Tesseract引擎
                using (var engine = new TesseractEngine(tessDataPath, language, EngineMode.Default))
                {
                    // 加载图片文件
                    using (var img = Pix.LoadFromFile(imagePath))
                    {
                        // 执行OCR识别
                        using (var page = engine.Process(img))
                        {
                            // 获取识别的完整文本
                            string text = page.GetText();
                            Console.WriteLine("识别结果:");
                            Console.WriteLine(text);

                            // 获取识别的置信度
                            float confidence = page.GetMeanConfidence();
                            Console.WriteLine($"识别置信度:{confidence * 100:F2}%");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"识别过程出现异常:{ex.Message}");
            }
        }
    }
}

优化识别效果的方法

如果识别结果准确率不高,可以通过以下方式优化:

图片预处理

识别前对图片做二值化、降噪、旋转矫正等处理,能显著提升识别准确率。可以使用System.Drawing命名空间下的类实现简单预处理:

using System.Drawing;
using System.Drawing.Imaging;

public static Bitmap PreprocessImage(string imagePath)
{
    using (var originalImg = new Bitmap(imagePath))
    {
        // 转为灰度图
        var grayImg = new Bitmap(originalImg.Width, originalImg.Height);
        for (int i = 0; i < originalImg.Width; i++)
        {
            for (int j = 0; j < originalImg.Height; j++)
            {
                Color color = originalImg.GetPixel(i, j);
                int grayValue = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11);
                grayImg.SetPixel(i, j, Color.FromArgb(grayValue, grayValue, grayValue));
            }
        }

        // 二值化处理,阈值设为128
        var binaryImg = new Bitmap(grayImg.Width, grayImg.Height);
        for (int i = 0; i < grayImg.Width; i++)
        {
            for (int j = 0; j < grayImg.Height; j++)
            {
                Color color = grayImg.GetPixel(i, j);
                if (color.R > 128)
                {
                    binaryImg.SetPixel(i, j, Color.White);
                }
                else
                {
                    binaryImg.SetPixel(i, j, Color.Black);
                }
            }
        }
        return binaryImg;
    }
}

调整识别参数

可以在初始化引擎后设置页面分割模式,适配不同的图片场景:

// 设置为自动页面分割模式,适合多行文本的图片
engine.DefaultPageSegMode = PageSegMode.Auto;
// 如果图片是单行的文本,可以设置为单行模式
// engine.DefaultPageSegMode = PageSegMode.SingleLine;

常见问题说明

  • 如果运行时提示找不到语言数据文件,需要检查tessdata目录是否正确,以及语言文件名是否和设置的语言参数匹配
  • 识别速度较慢时,可以尝试仅加载需要的语言数据,减少引擎初始化的开销
  • 处理高分辨率图片时,可以适当缩放图片尺寸,平衡识别速度和准确率

C#OCR识别Tesseract图像文字提取修改时间:2026-06-25 15:27:20

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。