4.适应部分场景:在一些应用场景中,彩色信息并不是必需的。例如,人脸识别中,大多数情况下只需要考虑人脸的形状和纹理,而颜色信息对于识别并不是必要的。
蓝色通道权重:0.114
string imagePath = "测试图片路径"; Bitmap original = new Bitmap(imagePath); Bitmap grayScale = new Bitmap(original.Width, original.Height); for (int y = 0; y < original.Height; y++) { for (int x = 0; x < original.Width; x++) { System.Drawing.Color originalColor = original.GetPixel(x, y); int grayScaleValue = (int)((originalColor.R * 0.299) + (originalColor.G * 0.587) + (originalColor.B * 0.114)); System.Drawing.Color grayColor = System.Drawing.Color.FromArgb(grayScaleValue, grayScaleValue, grayScaleValue); grayScale.SetPixel(x, y, grayColor); } } grayScale.Save("保存图片路径");原图如下所示:
string imagePath = "测试图片路径"; Bitmap original = new Bitmap(imagePath); Bitmap grayScale = new Bitmap(original.Width, original.Height); for (int y = 0; y < original.Height; y++) { for (int x = 0; x < original.Width; x++) { System.Drawing.Color originalColor = original.GetPixel(x, y); int grayScaleValue = (int)((originalColor.R + originalColor.G + originalColor.B) / 3); System.Drawing.Color grayColor = System.Drawing.Color.FromArgb(grayScaleValue, grayScaleValue, grayScaleValue); grayScale.SetPixel(x, y, grayColor); } } grayScale.Save("保存图片路径");使用OpenCV
string imagePath = "测试图片路径"; using (Mat src = new Mat(imagePath, ImreadModes.Color)) { Cv2.ImShow("原图", src); Cv2.WaitKey(0); using (Mat gray = new Mat()) { Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY); Cv2.ImShow("灰度图", gray); Cv2.WaitKey(0); } }OpenCVSharp中将彩色图转化为灰度图的函数:
Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY);实现效果: