我正在使用tesseract从图像中读取文本。由于我的BinaryImage输入不是纯白色背景上的简单文本,因此我只得到50%作为正确的输出。
有没有办法预处理图像,以便我可以从tesseract获得正确的输出?我已经尝试使用Otsu's method进行灰度缩放和二值化图像,但没有任何改进。
当我使用java做这一切时,如果有人可以分享任何java lib的详细信息或步骤以从tesseract获得更好的结果,将会很有帮助。
我没有得到正确的ImageMagick文档也可以在我的Java代码中使用它。对此有任何帮助表示赞赏。
答案 0 :(得分:0)
我认为您对账单的扫描可能分辨率太小。如果你有更高分辨率的图像(更大的尺寸),我相信你的效果会更好。您也可以尝试以非有损压缩格式保存扫描。你可以尝试局部区域阈值。但我不认为这会对这么小的文字有所帮助。不过,在ImageMagick中你可以用-lat命令来做。
convert image.jpg -negate -lat 25x25+10% -negate result.png
根据需要调整值。我还有一个bash unix shell脚本,textcleaner,可能在其他图像上更好。您可以在http://www.fmwconcepts.com/imagemagick/textcleaner/index.php
查看示例答案 1 :(得分:0)
我尝试通过灰度缩放和二值化图像来优化输出,但这没有用。然后我尝试boofcv来锐化我的图像,我得到了90%的优化输出。
在锐化图像之前,如果分辨率不够大,我们可以使用以下代码重新缩放图像:
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;
}
万一,任何人都陷入同样的境地。