C# RGB图像转为灰度图像、灰度图像转为RGB图像
作者:野牛程序员:2023-12-25 12:47:15C#阅读 2349
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