如何将像素转换为灰度?

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

 ...........PIXEL............ [red | green | blue | alpha]  

现在,我需要将哪些变换应用于单个RGB值以使图像成为灰度?
我的意思是,我添加/减少多少使图像灰度化?

更新

我在这里找到了一些方法: http : //www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/

对于每个像素,红色,绿色和蓝色通道的值应为其平均值。 喜欢这个:

 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); }