OpenCV4机器学习(三):颜色空间(RGB、HSI、HSV、Lab、Gray)之间的转换

前言:

本专栏主要结合OpenCV4(C++版本),来实现一些基本的图像处理操作、经典的机器学习算法(比如K-Means、KNN、SVM、决策树、贝叶斯分类器等),以及常用的深度学习算法。

系列文章:

相关推荐:

大家如果对 OpenCV-Python 感兴趣,可以前往优质博主【我是小白呀】【OpenCV专栏】学习:


一、颜色空间

颜色空间又称彩色模型,再数字图像处理中:

  • RGB 颜色空间最常用的是面向硬件的颜色空间,该空间经常用于屏幕显示和视频输出。
  • HSI(色调、饱和度、强度)空间,是一种更符合人描述和解释颜色的一种模型。它还有一个优点:可以解除图像中的颜色和灰度信息的联系,使其更适合某些灰度处理技术。
  • HSV(色调、饱和度、亮度)空间,不适合显示器系统,但是更符合人眼的视觉特性,因此通常会将颜色从RGB空间域转换到HSV颜色空间进行处理,然后在换回RGB域进行显示;
  • HSL(色调、饱和度、亮度)空间,与HSV类似,只不过把V:Value替换为了L:Lightness。这两种表示在用途上类似,但在方法上有区别。
  • Lab (亮度、颜色通道a、b)空间,弥补了RGB和CMYK两种色彩模式的不足。它是一种设备无关的颜色模型,也是一种基于生理特征的颜色模型。
  • CMY(青、洋红、黄)空间和CMYK(青、洋红、黄、黑)空间,是针对彩色打印机的。

二、RGB颜色空间

对图像处理而言,RGB是最为重要和常见的颜色模型,它建立在笛卡尔坐标系中,以红、绿、蓝三种基本色为基础,进行不同程度的叠加,产生丰富而广泛的颜色,俗称三基色模式。RGB颜色模式下的颜色非常接近 大自然的颜色,故又称为自然色彩模式。

RGB颜色空间是用一个单位长度的立方体来表示颜色的,黑蓝绿青红紫黄白8种常见颜色分别位居立方体的8个顶点,通常将黑色置于三维直角坐标系的原点,红绿蓝分别置于3根坐标轴上,整个立方体放在第1卦限内。如下图所示。而其中的青色与红色、紫色与绿色、黄色与蓝色是互补色。各参数的取值范围是:R:0-255;G:0-255;B:0-255。

参数值也称为三色系数或基色系数或颜色值,除以255后归一到0-1之间,但不是无穷多个而是有限多个值。由于每个灰度级都定为256,所以,红绿蓝分量全部组合起来共可表示256=2=16777216种不同的颜色。它比人眼能分辨的颜色种数多得多。因此,虽然自然界中的颜色非常多,但用RGB颜色空间来近似表达自然界中的颜色是完全够用了。

在这里插入图片描述
需要注意的是:OpenCV默认的RGB彩色空间的通道顺序为BGR,即蓝色、绿色和红色。例如:(255,0,0)表示蓝色,(0,255,0)表示绿色。

三、HSI颜色空间

HSI(色调、饱和度和亮度)空间可以从彩色图像中消除亮度分量的影响。因此,HIS空间对于开发基于彩色描述的图像处理算法来说是一个理想的彩色空间。在一些基于深度学习的分类识别任务中,通常将原始图像转换成HSI空间来削弱光线变化的影响,增强算法的稳定性。

HSI颜色空间可以用以双锥体表示,数学模型如下图:

在这里插入图片描述

RGB空间中的任何一个点可以转换成HSI空间中的点,具体的转换公式如下:
在这里插入图片描述

四、HSV颜色空间

HSV颜色空间中,H是Hue(色度)的缩写,S是Saturation(饱和度)的缩写,V是Value(亮度)的缩写:

  • 色度通常用来从宏观上区分某一种颜色,例如:白、黄、青、绿、品红、红、蓝、黑等就是色度;
  • 饱和度指的是颜色的纯度,通常情况下,颜色越鲜艳,饱和度越高;颜色越暗淡,饱和度越低;
  • 亮度指的是颜色的明暗程度,颜色越亮,亮度越高;颜色越暗,亮度越低。

HSV颜色空间的数学模型可以用一个圆锥来表示,如下图所示:

在这里插入图片描述
如图所示,某一像素的H可以由该点与白色基准线所形成的圆心角表示,H的取值范围为[0,360];某一点的S可以由该点与所在圆面的圆心之间的距离表示,距离越大,饱和度越高,反之越低;某一点的V可以由该点所在圆面与圆锥顶部之间的距离表示,距离越大,亮度越高,反之则越低。

RGB到HSV的转换公式如下:
在这里插入图片描述
HSV颜色空间不适合显示器系统,但是更符合人眼的视觉特性,因此通常会将颜色从RGB空间域转换到HSV颜色空间进行处理,然后在换回RGB域进行显示。

五、HSL颜色空间

HSL(色调、饱和度、亮度)空间,与HSV类似,只不过把V:Value替换为了L:Lightness。这两种表示在用途上类似,但在方法上有区别。

HSV和HSL二者在数学上都是圆柱,但HSV在概念上可以被认为是颜色的倒圆锥体(黑点在下顶点,白色在上底面圆心),HSL在概念上表示了一个双圆锥体和圆球体(白色在上顶点,黑色在下顶点,最大横切面的圆心是半程灰色)。注意尽管在HSL和HSV中“色调”指称相同的性质,它们的“饱和度”的定义是明显不同的。

RGB到HSL的转换公式如下:
在这里插入图片描述
在这里插入图片描述

六、Lab颜色空间

Lab颜色空间,弥补了RGB和CMYK两种色彩模式的不足。它是一种设备无关的颜色模型,也是一种基于生理特征的颜色模型。Lab颜色模型由三个要素组成:

  • 亮度L,反映光线强度;取值0~100;
  • 颜色通道a,a包括的颜色是从深绿色(低亮度值)到灰色(中亮度值)再到亮粉红色(高亮度值);取值-128~127;
  • 颜色通道b,是从亮蓝色(低亮度值)到灰色(中亮度值)再到黄色(高亮度值);取值-128~127。

这样规定是根据人类的视觉原理,灵长类动物的视觉都有两条通道:红绿通道和蓝黄通道,大多数动物最多只有一条通道,如果有人缺失其中一条,就是我们所说的色盲。

Lab模式对于PS极为重要,它是PS从一种颜色模式转换到另一种颜色模式的内部转化方式,PS从一种颜色模式转换到另一种颜色模式时,总是先转换到Lab模式。Lab色域是所有颜色模式中最宽广的,它囊括了RGB和CMYK的色域。

七、灰度颜色空间

很多类型的图像都没有色彩信息,只有亮度信息,通常使用灰度图表示,例如红外图像。灰度空间也是视觉机器学习任务中最基本的颜色空间。RGB空间转换为灰度空间的公式如下:

Y = 0.299 × R + 0.587 × G + 0.114 × B Y = 0.299 \times R + 0.587 \times G + 0.114 \times B Y=0.299×R+0.587×G+0.114×B

灰度空间转换为RGB空间的公式如下:

R = Y , G = Y , B = Y R=Y, G=Y, B=Y R=Y,G=Y,B=Y

八、颜色空间转换实战

cvtColor函数将输入的源图从某个颜色空间转换至另一个颜色空间。OpenCV的默认颜色空间为BGR,因此对于一个标准的3字节彩色图,第一个字节为8bit蓝色分量,第二个字节是8bit绿色分量,第三个字节是8bit红色分量。

cvtColor函数定义如下:

void cv::cvtColor(InputArray src, OutputArray dst, int code, int dstCn = 0)

各参数含义:

  • src:输入图像,可以是8位无符号整型(CV_8U)、16位无符号整型(CV_16U)或单精度浮点型数据
  • dst:输出图像,与输入图像的类型、大小和位深度均相等
  • code:颜色空间转换码,指定颜色空间转换的类型
  • dstCn:目标图像的通道数。当dstCn=0时,通道数将根据code与源图通道数自动确定

指定颜色空间转换的类型,将原图转换到不同的颜色空间,代码如下所示:

#include <iostream>
#include<opencv.hpp>

using namespace std;
using namespace cv;

int main()
{
	Mat img = imread("D:\\VSProject\\OpenCV4\\chap02\\lena.jpg", 1);
	imshow("Original", img);
	//imwrite("Original", img);

	Mat img_gray,  img_hsv, img_hsl, img_lab, img_rgb;
	cvtColor(img, img_rgb, COLOR_BGR2RGB);   //BGR转RGB
	cvtColor(img, img_gray, COLOR_BGR2GRAY); //BGR转灰度图
	cvtColor(img, img_hsv, COLOR_BGR2HSV);   //BGR转HSV
	cvtColor(img, img_lab, COLOR_BGR2Lab);   //BGR转Lab
	cvtColor(img, img_hsl, COLOR_BGR2HLS);   //BGR转HSL

	imshow("rgb", img_rgb);
	imshow("gray", img_gray);
	imshow("hsv", img_hsv);
	imshow("lab", img_lab);
	imshow("hsl", img_hsl);

	waitKey(0);
	return 0;
}

原图、RGB三通道图、灰度图如下所示:
在这里插入图片描述
HSV、HSL、Lab颜色空间下的图如下所示:
在这里插入图片描述


本专栏所有完整的代码将在我的GitHub仓库上更新,欢迎大家前往学习:

进入GitHub仓库,点击 star (红色箭头所示),第一时间获取干货:
在这里插入图片描述

最好的关系是互相成就,各位的「三连」就是【AI 菌】创作的最大动力,我们下期见!

在这里插入图片描述

  • 21
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI 菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值