【问题标题】:How to get the pixel value in a grayscale image如何获取灰度图像中的像素值
【发布时间】:2023-03-07 05:07:01
【问题描述】:

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

【问题讨论】:

  • getRGB 返回错误的颜色模型是什么意思?返回的是什么?

标签: java image pixel grayscale


【解决方案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】:

通过调用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?
  • 非常感谢。我已经实现了它,我得到了更理智的结果:-)
【解决方案3】:

前提是你有一个名为 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;

【讨论】:

  • 正确的数学是 dstBuff[y+x*width] & 0xFF;
猜你喜欢
  • 2015-06-08
  • 1970-01-01
  • 2017-11-17
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 2015-10-26
相关资源
最近更新 更多