C# RGB图像转为灰度图像、灰度图像转为RGB图像
作者:野牛程序员:2023-12-25 12:47:15C#阅读 2882
RGB图像可以通过将每个像素的红色(R)、绿色(G)和蓝色(B)通道的值加权平均来转换为灰度图像。以下是C#中的示例代码:
using System;
using System.Drawing;
class Program
{
static void Main()
{
// 读取RGB图像
Bitmap rgbImage = new Bitmap("path_to_rgb_image.jpg");
// 将RGB图像转换为灰度图像
Bitmap grayscaleImage = ConvertToGrayscale(rgbImage);
// 将灰度图像保存到文件
grayscaleImage.Save("path_to_grayscale_image.jpg");
// 将灰度图像转换回RGB图像
Bitmap rgbImageAgain = ConvertToRGB(grayscaleImage);
// 将RGB图像保存到文件
rgbImageAgain.Save("path_to_rgb_image_again.jpg");
}
static Bitmap ConvertToGrayscale(Bitmap rgbImage)
{
Bitmap grayscaleImage = new Bitmap(rgbImage.Width, rgbImage.Height);
for (int x = 0; x < rgbImage.Width; x++)
{
for (int y = 0; y < rgbImage.Height; y++)
{
Color pixel = rgbImage.GetPixel(x, y);
int grayValue = (int)(0.3 * pixel.R + 0.59 * pixel.G + 0.11 * pixel.B);
Color grayPixel = Color.FromArgb(grayValue, grayValue, grayValue);
grayscaleImage.SetPixel(x, y, grayPixel);
}
}
return grayscaleImage;
}
static Bitmap ConvertToRGB(Bitmap grayscaleImage)
{
Bitmap rgbImage = new Bitmap(grayscaleImage.Width, grayscaleImage.Height);
for (int x = 0; x < grayscaleImage.Width; x++)
{
for (int y = 0; y < grayscaleImage.Height; y++)
{
Color pixel = grayscaleImage.GetPixel(x, y);
Color rgbPixel = Color.FromArgb(pixel.R, pixel.R, pixel.R);
rgbImage.SetPixel(x, y, rgbPixel);
}
}
return rgbImage;
}
}请注意,这里使用了简单的加权平均方法将RGB图像转换为灰度图像。在ConvertToGrayscale方法中,0.3、0.59和0.11是常用的权重值。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

