0

在 Java 中,可以将包含多种颜色的图像加载到具有颜色空间 BufferedImage.TYPE_BYTE_BINARY 的 BufferedImage 对象中,然后图像为黑/白。我想知道的是如何“重新着色”为黑色/白色:每个像素是否独立于其他像素发生变化,例如,仅通过查看当前像素的颜色是否更类似于黑色而不是白色,或者是以某种方式考虑相邻像素?

状态的文档 BufferedImage.TYPE_BYTE_BINARY:

When color data is stored in an image of this type, the closest color in 
the colormap is determined by the IndexColorModel and the resulting index 
is stored.

我假设这意味着每个像素的颜色都独立于其相邻像素的颜色而改变,或者这句话是否意味着别的?我对成像的东西不是很熟悉,这就是为什么我想知道我是否正确。

4

1 回答 1

0

如果不涉及缩放,则转换应该是一对一的。在从彩色转换为黑白的情况下,可以通过像这样计算像素颜色的灰度值来完成Gray = 0.299×Red + 0.587×Green + 0.114×Blue并将阈值(例如 128)应用于结果来完成。如果大于 128,则设为白色;否则,将其设为黑色。假设颜色图中的第一个条目是黑色,第二个是白色,那么灰度值大于 128 的像素将被赋予条目索引 1,其他像素将被赋予索引 0;

注意: BufferedImage.TYPE_BYTE_BINARY 类型的 BufferedImage 有一个没有 alpha 的 IndexColorModel。它表示不透明的字节压缩 1、2 或 4 位图像,即 2 色、4 色和 16 色图像,具有适当颜色条目的颜色图。如果您在不传递 IndexColorModel 的情况下构造 BufferedImage,则会创建一个默认的 back-n-white colormap,其中包含两个条目 {0, 0, 0} 和 {255, 255, 255}。但这不限于黑白,您可以从默认的 sRGB ColorSpace 中选择任意两种颜色并创建一个 IndexColorModel 以传递给 BuffereImage 构造函数。您可以使用 IndexColorModel 以相同的方式创建 4 色和 16 色图像。

于 2012-05-06T18:31:53.743 回答