C# Tesseract OCR引擎不是';无法从自动生成的图像中读取文本,但可以从MS Paint中的剪切中读取

C# Tesseract OCR引擎不是';无法从自动生成的图像中读取文本,但可以从MS Paint中的剪切中读取,c#,image-processing,bitmap,ocr,tesseract,C#,Image Processing,Bitmap,Ocr,Tesseract,我正在为Tesseract OCR引擎使用.NET包装器。我有一个很大的文件是PNG。当我在MS paint中剪切一段图像,然后将其输入引擎时,它就工作了。但是当我在代码中这样做时,引擎无法识别图像中的文本。图像看起来一样,属性也不太不协调。所以我有点困惑 这是两张图片。来自MS paint: 从代码: 这是我从MS paint图像中得到的: 并通过代码: 它们非常相似,所以我不确定为什么它不能识别第二个文本。下面是我如何生成图像的 public Bitmap CropImage(Bit

我正在为Tesseract OCR引擎使用.NET包装器。我有一个很大的文件是PNG。当我在MS paint中剪切一段图像,然后将其输入引擎时,它就工作了。但是当我在代码中这样做时,引擎无法识别图像中的文本。图像看起来一样,属性也不太不协调。所以我有点困惑

这是两张图片。来自MS paint:

从代码:

这是我从MS paint图像中得到的:

并通过代码:

它们非常相似,所以我不确定为什么它不能识别第二个文本。下面是我如何生成图像的

public Bitmap CropImage(Bitmap source, Rectangle section)
    {
        Bitmap bmp = new Bitmap(section.Width, section.Height);
        Graphics g = Graphics.FromImage(bmp);
        g.DrawImage(source, 0, 0, section, GraphicsUnit.Pixel);

        return bmp;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Bitmap source = new Bitmap(test);
        Rectangle section = new Rectangle(new Point(78, 65), new Size(800, 50));
        Bitmap CroppedImage = CropImage(source, section);
        CroppedImage.Save(@"c:\users\user\desktop\test34.png", System.Drawing.Imaging.ImageFormat.Png);

        this.pictureBox1.Image = CroppedImage;
    }

新位图的默认分辨率为96 DPI,不足以用于OCR。尝试增加到300 DPI,例如:

bmp.SetResolution(300300)

更新1:缩放图像时,其尺寸也应更改。下面是一个示例重缩放函数:

public static Image Rescale(Image image, int dpiX, int dpiY)
{
    Bitmap bm = new Bitmap((int)(image.Width * dpiX / image.HorizontalResolution), (int)(image.Height * dpiY / image.VerticalResolution));
    bm.SetResolution(dpiX, dpiY);
    Graphics g = Graphics.FromImage(bm);
    g.InterpolationMode = InterpolationMode.Bicubic;
    g.PixelOffsetMode = PixelOffsetMode.HighQuality;
    g.DrawImage(image, 0, 0);
    g.Dispose();

    return bm;
}

陛下有没有什么具体的方法我需要改变决议?我调用了SetResolution,然后保存了图像。但是,该文件看起来是相同的。大小一样,什么都一样。我甚至试着把它改成(10001000)。OCR引擎仍然无法识别它。我认为它根本没有改变位图。在新位图中包装
test
图像也会将分辨率更改为96 DPI。因此,我使用它来反映图像中的变化。但是,当我增加数字时,图像会变小。所以我倒过来,把它从96.0华氏度降到80.0华氏度,然后再降到50.0华氏度。无法识别任何内容。能否显示调用Tesseract的代码?可能是Tesseract ocr正在从命令行正确执行,但在包装器调用代码时没有正确执行。我对演示项目没有太大的改动。