如何将像素转换为灰度?
Posted
技术标签:
【中文标题】如何将像素转换为灰度?【英文标题】:How to convert pixels to gray scale? 【发布时间】:2013-06-11 15:06:54 【问题描述】:好的,我正在使用Processing
,它允许我以int[]
访问任何图像的像素。我现在要做的是将图像转换为灰度。每个像素的结构如下图:
...........PIXEL............
[red | green | blue | alpha]
<-8--><--8---><--8--><--8-->
现在,我需要对各个 RGB 值应用哪些转换才能使图像变为灰度?? 我的意思是,我要加/减多少才能使图像变成灰度?
更新
我在这里找到了一些方法:http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/
【问题讨论】:
【参考方案1】:对于每个像素,红色、绿色和蓝色通道的值应该是它们的平均值。像这样:
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;
一般的想法是,当您拥有灰度图像时,每个像素的颜色仅测量该点的光强度 - 我们感知的方式是每个颜色通道的强度平均值。
【讨论】:
我还发现了几个方法:johndcook.com/blog/2009/08/24/… 由于那里描述的光度方法,您可以发表评论。我从来没有考虑过这样加权值。 我想进一步了解图像处理。我从哪里开始?? @LittleChild 我认为Programmers 是个问这个问题的好地方。至于我,我在大学里学到了一些东西,但从来没有深入过。现在我想做电子游戏,我也想更深入地了解它。【参考方案2】:以下代码加载图像并循环遍历其像素,将saturation更改为零并保持相同的hue和亮度值。
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);
【讨论】:
不,他使用的是Java方言Processing
以上是关于如何将像素转换为灰度?的主要内容,如果未能解决你的问题,请参考以下文章