在Java中,可以将包含多种颜色的图像加载到具有颜色空间BufferedImage.TYPE_BYTE_BINARY的BufferedImage对象中,然后图像为黑/白。我想知道的是如何完成对黑/白的“重新着色”:每个像素是否与其他像素独立地改变,例如,通过查看当前像素的颜色是否比黑色更接近白色,或者以某种方式考虑相邻像素?
文档BufferedImage.TYPE_BYTE_BINARY of states:
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.
我认为这意味着每个像素的颜色独立于其相邻像素的颜色而改变,或者这个引用是否意味着什么呢?我不太熟悉成像事物,这就是为什么我想知道我是否正确。
答案 0 :(得分: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色图是createde,其中包含两个条目{0,0,0}和{255,255,255}。但是这不仅限于黑白,您可以从默认的sRGB ColorSpace中选择任意两种颜色,并创建一个IndexColorModel以传递给BuffereImage构造函数。您可以使用IndexColorModel以相同的方式创建4色和16色图像。