什么';s java.awt.image.buffereImage的二进制化规则

什么';s java.awt.image.buffereImage的二进制化规则,java,image,awt,bufferedimage,color-space,Java,Image,Awt,Bufferedimage,Color Space,我可以使用这个代码 BufferedImage image = ImageIO.read(new File("toolbar.png")); BufferedImage grayImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_BINARY); Graphics graphics = grayImage.getGraphics(); graphics.drawImage(i

我可以使用这个代码

BufferedImage image = ImageIO.read(new File("toolbar.png"));
BufferedImage grayImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_BINARY);
Graphics graphics = grayImage.getGraphics();
graphics.drawImage(image, 0, 0, null);
graphics.dispose();
将缓冲区映像从类型\u 3BYTE\u BGR转换为类型\u 3BYTE\u BGR

例如,输入:

输出:


我知道根据计算规则,彩色像素会变成白色像素或黑色像素。它是什么?我能做些什么来调整它?提前感谢您的帮助。

上述代码中的转换是一种隐式转换,因为输入图像(RGB)的颜色比目标图像(二进制索引颜色)的颜色更多

将此转换为二进制颜色的“规则”可以简单地描述为“在目标中选择最接近输入的颜色”。因为你唯一的颜色是黑色和白色,所有R、G和B的平均值小于50%的颜色都会变成黑色,其余的都是白色。没有办法直接“调整”这一点


但是,为了获得更好的图像,可以直接控制阈值,也可以从输入中计算阈值。有关示例,请参见示例。

谢谢您的回答。你说“R、G和B的平均值小于50%”是什么意思。假设我们使用BGR24类型。这是否意味着“(R值+G值+B值)/3<255/2”?感谢您的帮助。