最近做的project需要涉及到对扫描图片的文字识别,需要将扫描得到的彩色图片变为1bit的黑白图片。 搜索到很多解决方案,基本的归纳为两个步骤,首先要将彩色图片变为8bit灰度图片(grayscale image),然后再进一步变为1bit的单色图片(1bit monochrome)。 方案一:使用ColorConvert和Dithering操作 1、代码 目前JAVA最新的图片处理包应该是JAI(Java Advanced Imaging),在JAI API的FAQ页面上,找到了下面的方法来完成这两步工作: 将彩色图片转换为8bit灰度图片(使用ColorConvert颜色转换操作) [java] public RenderedImage convertTo8BitGray(RenderedImage colorImage){ ParameterBlock pb = new ParameterBlock(); pb.addSource(colorImage); ColorModel cm = new ComponentColorModel( ColorSpace.getInstance(ColorSpace.CS_GRAY), new int[]{8}, false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE); pb.add(cm); RenderedImage grayImage = JAI.create(“ColorConvert”, pb); return grayImage; }[/java] 将8bit灰度图片转换为1bit黑白图片 (使用errordiffusion或ordereddither操作) [java] public RenderedImage applyDithering(RenderedImage grayImage, boolean isErrorDiffusion){ // Load the […]