【发布时间】:2023-03-07 05:07:01
【问题描述】:
我有一个 TYPE_BYTE_GRAY 的 BufferedImage,我需要获取 x,y 处的像素值。我知道我不能使用 getRGB,因为它返回了错误的颜色模型,那么我该怎么做呢?非常感谢!
【问题讨论】:
-
getRGB 返回错误的颜色模型是什么意思?返回的是什么?
标签: java image pixel grayscale
我有一个 TYPE_BYTE_GRAY 的 BufferedImage,我需要获取 x,y 处的像素值。我知道我不能使用 getRGB,因为它返回了错误的颜色模型,那么我该怎么做呢?非常感谢!
【问题讨论】:
标签: java image pixel grayscale
我猜你要找的是得到一个数字来表示该 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/
【讨论】:
通过调用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.
【讨论】:
前提是你有一个名为 grayImg 类型为 TYPE_BYTE_GRAY 的 BufferedImage
int width = grayImg.getWidth();
int height = grayImg.getHeight();
byte[] dstBuff = ((DataBufferByte) grayImg.getRaster().getDataBuffer()).getData();
那么 (x,y) 处的灰度值就是:
dstBuff[x+y*width] & 0xFF;
【讨论】: