目录
1、GRAY色彩空间
2、从BGR色彩空间转换到GRAY色彩空间
2.1色彩空间转换码
2.2实例 BGR色彩空间转换到GRAY色彩空间
3、HSV色彩空间
4、从BGR色彩空间转换到HSV色彩空间
4.1色彩空间转换码
4.2实例 BGR色彩空间转换到HSV色彩空间
GRAY色彩空间通常指的是灰度图像,灰度图像是一种每个像素都是从黑到白,被处理为256个灰度级别的单色图像。这256个灰度级别分别用区间[0,255]中的数值表示,其中,“0”表示纯黑色,“255”表示白色,0~255之间的数值表示不同的亮度(即色彩的深浅程度)的深灰色或者浅灰色。
如下图,一副花朵图像的灰度图像
OpenCvSharp中使用Cv2.CvtColor方法,该方法用于转换图像的色彩空间,其函数如下:
public static void CvtColor(InputArray src, OutputArray dst, ColorConversionCodes code, int dstCn = 0)
摘要:
Converts image from one color space to another
参数:
src:
The source image, 8-bit unsigned, 16-bit unsigned or single-precision floating-point
dst:
The destination image; will have the same size and the same depth as src
code:
The color space conversion code
dstCn:
The number of channels in the destination image; if the parameter is 0, the number
of the channels will be derived automatically from src and the code
ColorConversionCodes.BGR2GRAY 从BGR色彩空间转换到GRAY色彩空间
ColorConversionCodes.RGB2GRAY 从RGB色彩空间转换到GRAY色彩空间
代码如下:
Mat mat = Cv2.ImRead("test.jpg");
Cv2.ImShow("bgr", mat);
Cv2.CvtColor(mat, mat, ColorConversionCodes.BGR2GRAY);
Cv2.ImShow("gray", mat);
Cv2.WaitKey();
Cv2.DestroyAllWindows();
效果
虽然色彩空间类型转换是双向的,而且OpenCV也提供了ColorConversionCodes.BGR2GRAY(从BGR色彩空间转换到GRAY色彩空间)和ColorConversionCodes.GRAY2BGR(从GRAY色彩空间转换到BGR色彩空间)这两个转换码,但是灰度图像是无法转换成彩色图像的。这是因为在彩色图像转换成灰度图像的过程中,丢失了颜色比例。这些比例丢失了就再也找不回来了。
BGR色彩空间是基于三基色而言,即红色、绿色、蓝色。而HSV色彩空间则是基于色调、饱和度和亮度而言的。
色调(H)是指光的颜色,例如,彩虹中的赤,橙,黄,绿,青,蓝,紫分别表示不同的色调。在OpenCV中,色调在区间[0,180]内取值。例如,代表红色、黄色、绿色和蓝色的色调值分别为0、30、60和120。
饱和度(S)值色彩的深浅。在OpenCV中,饱和度在区间[0,255]内取值。当饱和度为0时,图像将变为灰度图像。
亮度(V)指光的明暗。与饱和度相同,在OpenCV中,亮度在区间[0,255]内取值。亮度值越大,图像越亮;当亮度值为0时,图像呈纯黑色。
OpenCvSharp提供Cv2.CvtColor方法,该方法不仅可以从BGR色彩空间转换到GRAY色彩空间,还可以将图像从BRG色彩空间转换到HSV色彩空间。
ColorConversionCodes.BGR2HSV 从BGR色彩空间转换到HSV色彩空间
ColorConversionCodes.RGB2HSV 从RGB色彩空间转换到HSV色彩空间
代码如下:
Mat mat = Cv2.ImRead("test.jpg");
Cv2.ImShow("bgr", mat);
Cv2.CvtColor(mat, mat, ColorConversionCodes.BGR2HSV);
Cv2.ImShow("hsv", mat);
Cv2.WaitKey();
Cv2.DestroyAllWindows();
效果