来自java BuffereImage getRGB()的奇怪RGB值
我试图从灰度图像中获取RGB值,结果返回错误(?)RGB值。这是代码来自java BuffereImage getRGB()的奇怪RGB值,java,image-processing,colors,Java,Image Processing,Colors,我试图从灰度图像中获取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 为什么会发
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。我做错了吗
这就是图像
试试这个
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(intx,inty,intb)将位于(x,y)的像素在指定频带内的样本作为int返回。[根据
参数:x-像素位置的x坐标
y-像素位置的y坐标
b-返回[R,G,b]
b=[0,1,2]的频带
再看看这是因为
image.getRGB(x,y)
根据定义返回sRGB颜色空间中的ARGB值
从:
返回默认RGB颜色模型(TYPE\u INT\u ARGB
)和默认sRGB颜色空间中的整数像素。如果此默认模型与图像ColorModel
不匹配,则会进行颜色转换
Matlab和其他工具可能使用线性RGB或灰色空间,这就是值不同的原因
如果图像为灰度(TYPE\u BYTE\u gray
),可以通过访问Raster
及其getDataElements
方法从Java获得相同的值
Object pixel = raster.getDataElements(0, 0, null); // x, y, data array (initialized if null)
如果图像是TYPE\u BYTE\u GRAY
,像素
将是带有单个元素的字节
数组
int grayValue = ((byte[]) pixel)[0] & 0xff;
在您的情况下,此值将为
153
。@FastSnail这是我的灰度图像,我看到一个编辑建议,建议添加import java.awt.image.WritableRaster.getRaster()是BuffereImage类中的一个公共方法,它返回一个可写的光栅对象。为什么建议编辑?您能再解释一下吗?@HawasKaPujaariSir,我可以问您为什么我们最后需要0xff掩码吗?我意识到没有它,会出现一个完全不同的值…@Peter,因为byte在Java中是有符号的类型,我们需要一个无符号的价值
int grayValue = ((byte[]) pixel)[0] & 0xff;