如何获取灰度图像中的像素值

时间:2011-11-21 17:49:18

标签: java image pixel grayscale

我有一个TYPE_BYTE_GRAY的BufferedImage,我需要得到x,y的像素值。我知道我不能使用getRGB,因为它返回错误的颜色模型,所以我该怎么办呢?非常感谢!

3 个答案:

答案 0 :(得分:2)

通过调用java.awt.image.Raster方法从BufferedImage获取getData()

然后使用

int getSample(int x, int y, int b)

on received object,其中b是颜色通道(其中每种颜色由8位表示)。

灰度

b = 0.

对于RGB图像

b = 0 ==>> R channel,
b = 1 ==>> G channel,
b = 2 ==>> B channel.

答案 1 :(得分:1)

我猜你想要的是用一个数字来表示RGB中的灰度等级的数学,几乎没有差异,跟随其中一些:

  

亮度法平均最突出,最不突出   颜色:(max(R,G,B)+ min(R,G,B))/ 2。

     

平均方法简单地平均值:(R + G + B)/ 3.

     

发光度方法是平均值的更复杂版本   方法。它还对值进行平均,但它形成加权平均值   考虑到人类的感知。我们对绿色比对绿色更敏感   其他颜色,所以绿色加权最重。的公式   发光度为0.21 R + 0.71 G + 0.07 B。

参考:http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/

答案 2 :(得分:0)

如果您有一个名为grayImg的BufferedImage,其类型为TYPE_BYTE_GRAY

int width = grayImg.getWidth();

int height = grayImg.getHeight();

byte[] dstBuff = ((DataBufferByte) grayImg.getRaster().getDataBuffer()).getData();

然后(x,y)的灰度值就是:

dstBuff[x+y*width] & 0xFF;