摘要
在 C# 中使用 OpenCvSharp 进行颜色转换,主要是通过两个函数:cvtColor 和 bgr2Lab 实现的。其中,cvtColor 函数可以将图像从一个颜色空间转换到另一个颜色空间,例如将图像从 RGB 转换为灰度图像。而 bgr2Lab 函数则可以将 BGR 格式的图像转换为 LAB 格式的图像,其中 LAB 是一种常用的颜色空间。
此外,OpenCvSharp 还提供了一些通道分离和合并的函数。例如,cvtColor 函数还可以实现对图像通道的分离,使得我们可以对每个通道进行单独的处理。同时,我们也可以使用 merge 函数将多个通道的图像合并为一个。
除此之外,OpenCvSharp 还提供了其他的颜色转换函数,例如 Lab2BGR 和 Hsv2Bgr 等,可以帮助我们实现更多的颜色空间转换和处理。
正文
nuget 安装库
OpenCVSharp 库
OpenCvSharp4.runtime.win 库
OpenCvSharp.Extensions 库
在 WinForms 窗体中,创建七个 PictureBox 控件,分别用于显示原始图像、灰度图像、HSV 图像、合并通道图像以及分离的三个通道图像。在 Load 方法中调用 LoadConvertImage 方法加载图像并进行颜色转换,然后将结果显示在各个 PictureBox 控件中。
- 将图像转换为灰度图像。
- 将图像转换为 HSV 色彩空间。
- 将图像的三个通道合并为一个灰度通道图像。
- 将图像的三个通道分离并显示每个通道的图像。
private void Form3_Load(object sender, EventArgs e)
{
LoadConvertImage();
}
private void LoadConvertImage()
{
Mat sourceImage = Cv2.ImRead("./C#logo.jpg", ImreadModes.Color);
if (sourceImage.Empty())
{
MessageBox.Show("载入图片出错");
return;
}
Mat grayscaleImage = new Mat();
Cv2.CvtColor(sourceImage, grayscaleImage, ColorConversionCodes.BGR2GRAY);
Mat hsvImage = new Mat();
Cv2.CvtColor(sourceImage, hsvImage, ColorConversionCodes.BGR2HSV);
Mat mergedChannels = new Mat();
Cv2.Merge(new[] { grayscaleImage, grayscaleImage, grayscaleImage }, mergedChannels);
Mat splitChannels = new Mat();
Cv2.Split(sourceImage, out Mat[] channels);
pictureBox1.Image = BitmapConverter.ToBitmap(sourceImage);
pictureBox2.Image = BitmapConverter.ToBitmap(grayscaleImage);
pictureBox3.Image = BitmapConverter.ToBitmap(hsvImage);
pictureBox4.Image = BitmapConverter.ToBitmap(mergedChannels);
pictureBox5.Image = BitmapConverter.ToBitmap(channels[0]);
pictureBox6.Image = BitmapConverter.ToBitmap(channels[1]);
pictureBox7.Image = BitmapConverter.ToBitmap(channels[2]);
}