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

5

我有一个BufferedImage,它的类型是TYPE_BYTE_GRAY,我需要获取x,y处的像素值。我知道不能使用getRGB,因为它返回错误的颜色模型,那么我该怎么做呢?非常感谢!


getRGB返回错误的颜色模型是什么意思?是什么在返回它? - Arthur Neves
3个回答

2

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

然后使用

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

在接收到对象时,其中b是颜色通道(每种颜色由8位表示)。

对于灰度图像:

b = 0.

对于RGB图像

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

看了这些方法后,这似乎是最可行的方式。似乎int b是光栅的“带”,我不太确定这是什么意思,相信我,我已经在网上查过了。我假设由于我有一张灰度图像,它只有一个带,因此我想让b等于0? - cherryduck
太棒了,谢谢。我已经实现了它,结果变得更加合理了 :-) - cherryduck

1

我想你想找的是将RGB转换为灰度值的数学公式,有几种不同的方法,以下是其中的一些:

亮度法(Lightness method):计算最明显颜色和最不明显颜色的平均值:(max(R, G, B) + min(R, G, B)) / 2。

平均值法(Average method):简单地对三个通道的值进行平均:(R + G + B) / 3。

亮度平均法(Luminosity method):是平均值法的一个更复杂的版本。它也会计算三个通道的平均值,但是通过加权平均来考虑人类视觉的感知。人类对绿色的敏感性比其他颜色更高,因此绿色的权重最大。亮度平均法的公式为:0.21 R + 0.71 G + 0.07 B。

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


1
好的,谢谢。我会研究一下。不过,既然我的图像已经是灰度的了,那么肯定有一种简单的方法可以直接从图像中获取像素值吧? - cherryduck

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;

正确的数学计算应该是 dstBuff[y+x*width] & 0xFF; - AlbertoAndreotti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接