0

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

//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();
4

2 回答 2

2

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

您可以使用RescaleOp在转换之前使图像变亮,或者将一个实例与您的图像一起传递给drawImage采用BufferedImageOpas 参数的方法。请注意,您可以独立缩放 R、G 和 B 值。

于 2013-09-12T19:56:05.487 回答
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);

check this link

于 2013-09-12T07:44:09.463 回答