代码之家  ›  专栏  ›  技术社区  ›  Virat Mishra

如何在使用tesseract阅读之前清理图像文本?

  •  1
  • Virat Mishra  · 技术社区  · 7 年前

    我正在使用tesseract从图像中读取文本。由于我的BinaryImage输入不会是纯白色背景上的简单文本,因此我得到的正确输出只有50%。

    Otsu's method ,但没有改善。

    我没有得到适当的ImageMagick文档来在我的Java代码中使用它。在此方面的任何帮助都将不胜感激。

    sample image ( any wireless bill of AT & T)

    2 回复  |  直到 7 年前
        1
  •  1
  •   fmw42    7 年前

    我认为你扫描账单的分辨率可能太小了。我相信如果你有一个更高分辨率的图像(更大的尺寸),你会得到更好的结果。此外,您可以尝试将扫描保存为无损耗压缩格式。您可以尝试局部阈值。但我认为这对这么小的文本没有帮助。然而,在ImageMagick中,您可以使用-lat命令来实现这一点。

    convert image.jpg -negate -lat 25x25+10% -negate result.png
    

    enter image description here

    根据需要调整值。我还有一个bash unix shell脚本textcleaner,在其他图像上可能更好。您可以在中看到示例 http://www.fmwconcepts.com/imagemagick/textcleaner/index.php

        2
  •  1
  •   Virat Mishra    7 年前

    boofcv

    在锐化图像之前,如果分辨率不够大,我们可以使用以下代码重新缩放图像:

    public static BufferedImage scale(BufferedImage img, int imageType, int dWidth, int dHeight, double fWidth, double fHeight) {
    BufferedImage img = null;
    if(img != null) {
        img = new BufferedImage(dWidth, dHeight, imageType);
        Graphics2D g = img.createGraphics();
        AffineTransform at = AffineTransform.getScaleInstance(fWidth, fHeight);
        g.drawRenderedImage(img, at);
    }
    return img;
    

    }