将彩色图像转换为背面/白色图像

时间:2013-09-12 07:38:33

标签: java image bufferedimage tiff

我正致力于将彩色图像转换为黑白图像。我正在使用类型为TYPE_BYTE_BINARY的BufferedImage。但输出图像未正确转换。例如,如果图像在黑色背景上包含蓝色字母,则此部分的结果图像为全黑色。有谁能够帮我?我的代码如下。

//Invert the colormodel
byte[] map = new byte[] { (byte) (255), (byte) (0) };
IndexColorModel colorModel = new IndexColorModel(1, 2, map,
map, map);

BufferedImage bufferedImage = new BufferedImage(
img.getWidth(null), img.getHeight(null),
BufferedImage.TYPE_BYTE_BINARY, colorModel);
Graphics2D g2 = bufferedImage.createGraphics();
g2.drawImage(img, 0, 0, null);
g2.dispose();

2 个答案:

答案 0 :(得分:2)

蓝色具有非常低的强度,因此当转换为具有50%阈值的b / w时,蓝色(如RGB(0,0,255))变黑。在转换为黑白之前尝试增亮原始图像,以增加图像的白色部分。

您可以使用RescaleOp在转换前使图像变亮,或将实例与图像一起传递到以BufferedImageOp为参数的drawImage方法。请注意,您可以单独缩放R,G和B值。

答案 1 :(得分:1)

BufferedImage bufferedImage= new BufferedImage(img.getWidth(null), img.getHeight(null); 
    ColorConvertOp op = 
        new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
    op.filter(bufferedImage, bufferedImage);

检查此link