来自java BufferedImage的奇怪RGB值getRGB()

Ikh*_*r A 4 java colors image-processing

我试图从灰度图像中获取RGB值,并返回错误的(?)RGB值.这是代码.

Color color = new Color(image.getRGB(0, 0));
System.out.print(color.getRed());
System.out.print(color.getGreen());
System.out.print(color.getBlue());
Run Code Online (Sandbox Code Playgroud)

在颜色选择器使用时,第一个像素RGB值,R:153,G:153,B:153但我的代码打印

203203203
Run Code Online (Sandbox Code Playgroud)

为什么会发生这件事?而且,我试图使用MATLAB灰度值的精确像素也是153.我这样做错了吗?

这是图像

在此输入图像描述

har*_*ldK 5

这是因为image.getRGB(x, y)通过定义返回sRGB颜色空间中的 ARGB值.

来自JavaDoc:

返回默认RGB颜色模型(TYPE_INT_ARGB)和默认sRGB颜色空间中的整数像素.如果此默认模型与图像不匹配,则会进行颜色转换ColorModel.

Matlab和其他工具可能使用线性RGB或灰色空间,这就是值不同的原因.

如果图像是灰度(TYPE_BYTE_GRAY),则可以通过访问Raster及其getDataElements方法从Java获取相同的值.

Object pixel = raster.getDataElements(0, 0, null); // x, y, data array (initialized if null)
Run Code Online (Sandbox Code Playgroud)

如果图像是TYPE_BYTE_GRAY,pixel则将是byte具有单个元素的数组.

int grayValue = ((byte[]) pixel)[0] & 0xff;
Run Code Online (Sandbox Code Playgroud)

这个值将153在您的情况下.