我怎样才能得到灰度图像像素的整数值(范围0-255)

时间:2016-07-19 17:28:13

标签: c#

嗨我想获得灰度图像的整数值(0-255范围)....这段代码显示R,G,B值不是一个值..我可以得到它吗?

Bitmap temp1 = image1;
for (int i = 0; i < temp1.Height; i++)
{
    for (int j = 0; j < temp1.Width; j++)
    {
        Color cl = new Color();
        cl = temp1.GetPixel(i, j);
    }
}

3 个答案:

答案 0 :(得分:0)

如果您的源图像是灰度级而您只想要灰度级别,则只需选择三个组件中的任何一个。他们将是平等的。

如果您的源图像是彩色但您想获得灰色等效图像,则可以将红色,绿色和蓝色组件混合在一起,将颜色转换为0..255范围内的灰度值。混合因子是不同的,因为人眼对三原色具有不同的灵敏度。为了好玩,尝试改变因子(例如,每个使用0.3333),看看结果如何。

Color cl = c.GetPixel(i, j); // No need to separately allocate a new Color()
int greyValue = (int)((cl.R * 0.3) + (cl.G * 0.59) + (cl.B * 0.11));
Color grey = Color.FromArgb(cl.A, greyValue, greyValue, greyValue);

请注意,在每个像素上使用GetPixel()循环遍历较大的Bitmap非常慢。有更快的技术可供使用。

<强>更新

enter image description here

这是一个示例图像,其中应用了R,G和B的不同缩放因子。图像将始终为灰度,因为修改后的图像中的每个RGB分量使用相同的数值,但相对亮度确实会发生变化。中间图像使用适合人眼的缩放因子。请注意原始图像中的蓝色区域在最右边的版本中是如何过饱和的。

答案 1 :(得分:0)

有多种方法可以从RGB获得灰度。 常见的方法是做(R + G + B)/ 3 其他人正在计算一些亮度亮度测量值(Lab,YUV,HSV)

答案 2 :(得分:0)

只需读取属性R或G或B,其中任何一个都具有相同的值。

var intValue = cl.R;