Java 如何将像素转换为灰度?

Java 如何将像素转换为灰度?,java,image,processing,multimedia,Java,Image,Processing,Multimedia,好的,我正在使用处理,它允许我以int[]的形式访问任何图像的像素。我现在想做的是将图像转换为灰度。每个像素具有如下所示的结构: ...........PIXEL............ [red | green | blue | alpha] <-8--><--8---><--8--><--8--> ……像素。。。。。。。。。。。。 [红|绿|蓝|阿尔法] 现在,我需要对单个RGB值应用哪些变换才能使图像灰度化?? 我的意思是,我应该加/

好的,我正在使用
处理
,它允许我以
int[]
的形式访问任何图像的像素。我现在想做的是将图像转换为灰度。每个像素具有如下所示的结构:

...........PIXEL............
[red | green | blue | alpha]
<-8--><--8---><--8--><--8-->  
……像素。。。。。。。。。。。。
[红|绿|蓝|阿尔法]
现在,我需要对单个RGB值应用哪些变换才能使图像灰度化??
我的意思是,我应该加/减多少使图像灰度化

更新
我在这里找到了一些方法:

对于每个像素,红色、绿色和蓝色通道的值应该是它们的平均值。像这样:

int red = pixel.R;
int green = pixel.G;
int blue = pixel.B;

pixel.R = pixel.G = pixel.B = (red + green + blue) / 3;
由于在您的情况下,像素颜色似乎存储在数组中,而不是属性中,因此您的代码可能最终看起来像:

int red = pixel[0];
int green = pixel[1];
int blue = pixel[2];

pixel[0] = pixel[1] = pixel[2] = (red + green + blue) / 3;

一般的想法是,当你有一个灰度图像时,每个像素的颜色只测量该点的光的强度-我们感知的方式是每个颜色通道的平均强度。

下面的代码加载一个图像并循环通过它的像素,将饱和度更改为零,并保持相同的色调亮度

PImage img;

void setup () {
    colorMode(HSB, 100);
    img = loadImage ("img.png");
    size(img.width,img.height);
    color sat = color (0,0,0);

    img.loadPixels();

    for (int i = 0; i < width * height; i++) {
        img.pixels[i]=color (hue(img.pixels[i]), sat, brightness(img.pixels[i]));
    }

    img.updatePixels();
    image(img,0,0);
}
PImage-img;
无效设置(){
彩色模式(HSB,100);
img=loadImage(“img.png”);
尺寸(最小宽度、最小高度);
颜色sat=颜色(0,0,0);
img.loadPixels();
对于(int i=0;i
我还发现了一些其他方法:一个取决于您的评论,因为这里描述了光度方法。我从来没有想过像这样对值进行加权。我想在图像处理方面做得更多。。我该从哪里开始呢???@小男孩,我想这是个好地方。至于我,我在大学里学到了一些东西,但从来没有深入研究过。现在我想做电子游戏,我也想更多地参与其中。不,他正在使用
处理
,这是Java的一种方言