我试图从灰度图像中获取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());
在颜色选择器使用时,第一个像素RGB值R:153,G:153,B:153
,但我的代码打印
203203203
为什么会发生这件事?而且,我试图使用MATLAB灰度值确切的像素也是153.我这样做错了吗?
这是图像
答案 0 :(得分: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)
如果图片为TYPE_BYTE_GRAY
,pixel
将是一个包含单个元素的byte
数组。
int grayValue = ((byte[]) pixel)[0] & 0xff;
在您的情况下,此值为153
。
答案 1 :(得分:3)
试试这个
System.out.println(image.getRaster().getSample(0, 0, 0)); //R
System.out.println(image.getRaster().getSample(0, 0, 1)); //G
System.out.println(image.getRaster().getSample(0, 0, 2)); //B
此处
getSample(int x, int y, int b)将位于(x,y)的像素的指定波段中的样本作为int返回。 [根据this]
<强>参数:强>
x - 像素位置的X坐标
y - 像素位置的Y坐标
b - 要返回的波段b = [0,1,2],[R,G,B]