opencv-18 什么是色彩空间?

1.什么是色彩空间类型?

色彩空间类型,也称为颜色空间类型或色彩模型,是一种表示图像中颜色的方式。在计算机图形学和数字图像处理中,有许多种色彩空间类型,每种类型有不同的表达方式和特点。

常见的色彩空间类型包括:

RGB (Red, Green, Blue):

RGB 是最常见和广泛使用的色彩空间类型。它使用红色(R)、绿色(G)和蓝色(B)三个通道来表示颜色。每个通道的取值范围通常是 0 到 255,其中 0 表示最小强度(无颜色),255 表示最大强度(全颜色)。

HSV (Hue, Saturation, Value):

HSV 色彩空间是基于人类视觉感知的方式来表示颜色。它使用色调(Hue)、饱和度(Saturation)和明度(Value)三个分量来表示颜色。色调表示颜色的类型(如红色、绿色、蓝色等),饱和度表示颜色的纯度或鲜艳程度,明度表示颜色的明亮程度。

CMYK (Cyan, Magenta, Yellow, Key/Black):

CMYK 色彩空间主要用于印刷领域。它使用青色(Cyan)、品红(Magenta)、黄色(Yellow)和黑色(Key/Black)四个分量来表示颜色。CMYK 色彩空间适用于描述印刷颜色和色彩叠加的过程。

Lab (CIELAB):

Lab 色彩空间是一种基于人类视觉感知的颜色空间。它使用亮度(L)和两个色度通道(a、b)来表示颜色。L 表示亮度(从黑到白),a 和 b 分别表示颜色在红绿和黄蓝方向上的偏移。

YUV/YCbCr:

YUV 和 YCbCr 色彩空间主要用于数字视频和图像压缩。它们使用亮度分量(Y)和两个色度分量(U、V或Cb、Cr)来表示颜色。Y 表示亮度信息,U 和 V(或Cb 和 Cr)表示颜色的色度信息。

每种色彩空间类型都有其特定的应用场景和优缺点。在图像处理和计算机视觉中,根据不同的需求和算法,选择合适的色彩空间类型可以提高处理效率和结果质量。例如,RGB色彩空间适用于计算机显示和处理,HSV 色彩空间适用于颜色选择和图像分割,Lab 色彩空间适用于色彩感知相关的任务等。

opencv 中比较常用的色彩空间包括 GRAY 色彩空间、XYZ 色彩空间、YCrCb 色彩空间、HSV 色彩空间、HLS 色彩空间、CIELa b色彩空间、CIEL uv色彩空间、Bayer 色彩空间等,下面将依次介绍

GRAY色彩空间

GRAY(灰度图像)通常指 8 位灰度图,其具有 256 个灰度级,像素值的范围是[0,255]。

当图像由 RGB 色彩空间转换为 GRAY 色彩空间时,其处理方式如下:

python 复制代码
Gray = 0.299 · 𝑅 + 0.587 · 𝐺 + 0.114 · 𝐵

上述是标准的转换方式,也是 OpenCV 中使用的转换方式。有时,也可以采用简化形式完

成转换:

python 复制代码
Gray = 𝑅 + 𝐺 + 𝐵

当图像由 GRAY 色彩空间转换为 RGB 色彩空间时 ,最终所有通道的值都将是相同的,其

处理方式如下:

python 复制代码
𝑅 = Gray
𝐺 = Gray
𝐵 = Gray

XYZ色彩空间

XYZ 色彩空间是由 CIE(International Commission on Illumination )定义的,是一种更便于计算的色彩空间,它可以与 RGB 色彩空间相互转换。
将 RGB 色彩空间转换为 XYZ 色彩空间,其转换形式为:


将 XYZ 色彩空间转换为 RGB 色彩空间,其转换形式为:


YCrCb色彩空间

人眼视觉系统(HVS,Human Visual System)对颜色的敏感度要低于对亮度的敏感度。在

传统的 RGB 色彩空间内,RGB 三原色具有相同的重要性,但是忽略了亮度信息。

在 YCrCb 色彩空间中,Y 代表光源的亮度,色度信息保存在 Cr 和 Cb 中,其中,Cr 表示红色分量信息,Cb 表示蓝色分量信息。

亮度给出了颜色亮或暗的程度信息,该信息可以通过照明中强度成分的加权和来计算。

在RGB 光源中,绿色分量的影响最大,蓝色分量的影响最小。

从 RGB 色彩空间到 YCrCb 色彩空间的转换公式为:

python 复制代码
𝑌 = 0.299 · 𝑅 + 0.587 · 𝐺 + 0.114 · B

Cr = (𝑅 − 𝑌) × 0.713 + delta

Cb = (𝐵 − 𝑌) × 0.564 + delta

式中 delta 的值为:

从 YCrCb 色彩空间到 RGB 色彩空间的转换公式为:

python 复制代码
𝑅 = 𝑌 + 1.403 · (Cr − delta)
𝐺 = 𝑌 − 0.714 · (Cr − delta) − 0.344 · (Cb − delta)
𝐵 = 𝑌 + 1.773 · (Cb − delta)

式中,delta 的值与上面公式中的 delta 值相同。

HSV色彩空间

RGB 是从硬件的角度提出的颜色模型,在与人眼匹配的过程中可能存在一定的差异,HSV色彩空间是一种面向视觉感知的颜色模型。HSV 色彩空间从心理学和视觉的角度出发,指出人眼的色彩知觉主要包含三要素:色调(Hue,也称为色相)、饱和度(Saturation)、亮度(Value),

色调指光的颜色,饱和度是指色彩的深浅程度,亮度指人眼感受到的光的明暗程度。

** 色调:**色调与混合光谱中的主要光波长相关,例如"赤橙黄绿青蓝紫"分别表示不同的色调。如果从波长的角度考虑,不同波长的光表现为不同的颜色,实际上它们体现的是

色调的差异。

** 饱和度:**指相对纯净度,或一种颜色混合白光的数量。纯谱色是全饱和的,像深红色(红

加白)和淡紫色(紫加白)这样的彩色是欠饱和的,饱和度与所加白光的数量成反比。

** 亮度:**反映的是人眼感受到的光的明暗程度,该指标与物体的反射度有关。对于色彩来

讲,如果在其中掺入的白色越多,则其亮度越高;如果在其中掺入的黑色越多,则其亮

度越低。

在具体实现上,我们将物理空间的颜色分布在圆周上,不同的角度代表不同的颜色。因此,

通过调整色调值就能选取不同的颜色,色调的取值区间为[0, 360]。色调取不同值时,所代表的颜色如表 4-1 所示,两个角度之间的角度对应两个颜色之间的过渡色。

饱和度为一比例值,范围是[0, 1],具体为所选颜色的纯度值和该颜色最大纯度值之间的比

值。饱和度的值为 0 时,只有灰度。亮度表示色彩的明亮程度,取值范围也是[0, 1]。

在 HSV 色彩模型中,取色变得更加直观。例如,取值"色调=0,饱和度=1,亮度=1",则

当前色彩为深红色,而且颜色较亮;取值"色调=120,饱和度=0.3,亮度=0.4",则当前色彩为

浅绿色,而且颜色较暗。

在从 RGB 色彩空间转换到 HSV 色彩空间之前,需要先将 RGB 色彩空间的值转换到[0, 1]

之间,然后再进行处理。具体处理方法为:


计算结果可能存在 H<0 的情况,如果出现这种情况,则需要对 H 进行进一步计算,如下。

由上述公式计算可知:

python 复制代码
𝑆 ∈ [0,1]
𝑉 ∈ [0,1]
𝐻 ∈ [0,360]

当然,也可以通过公式完成从 HSV 色彩空间到 RGB 色彩空间的转换。在 OpenCV 的官方

文档中有完整的转换公式,这里不再赘述。

当然,所有这些转换都被封装在 OpenCV 的 cv2.cvtColor()函数内。通常情况下,我们都是直接调用该函数来完成色彩空间转换的,而不用考虑函数的内部实现细节。

HLS色彩空间

HLS 色彩空间包含的三要素是色调 H(Hue)、光亮度/明度 L(Lightness)、饱和度 S

(Saturation)。

与 HSV 色彩空间类似,只是 HLS 色彩空间用"光亮度/明度 L(lightness)"替换了"亮度

(Value)"。

** 色调:**表示人眼所能感知的颜色,在 HLS 模型中,所有的颜色分布在一个平面的色调

环上,整个色调环为 360 度的圆心角,不同的角度代表不同的颜色,如表 4-1 所示。

** 光亮度/明度:**用来控制色彩的明暗变化,它的取值范围也是[0, 1]。我们通过光亮度/明

度的大小来衡量有多少光线从物体表面反射出来。光亮度/明度对于眼睛感知颜色很重

要,因为当一个具有色彩的物体处于光线太强或者光线太暗的地方时,眼睛是无法准确

感知物体颜色的。

** 饱和度:**使用[0, 1]的值描述相同色调、相同光亮度/明度下的色彩纯度变化。饱和度的

值越大,表示颜色的纯度越高,颜色越鲜艳;反之,饱和度的值越小,色彩的纯度越低,

颜色越暗沉。通常用该属性表示颜色的深浅,比如深绿色、浅绿色。

CIELab*色彩空间

CIELa b*色彩空间是均匀色彩空间模型,它是面向视觉感知的颜色模型 。从视觉感知均匀的角度来讲,人所感知到的两种颜色的区别程度,应该与这两种颜色在色彩空间中的距离成正比。在某个色彩空间中,如果人所观察到的两种颜色的区别程度,与这两种颜色在该色彩空

间中对应的点之间的欧式距离成正比,则称该色彩空间为均匀色彩空间。

CIELa b色彩空间中的 L 分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白

a分量表示从红色到绿色的范围,取值范围是[-127,127];
b
分量表示从黄色到蓝色的范围,取值范围是[-127,127]。

在从 RGB 色彩空间转换到 CIELab*色彩空间之前,需要先将 RGB 色彩空间的值转换到[0, 1]之间,然后再进行处理。

由于 CIELa b色彩空间是在 CIE 的 XYZ 色彩空间的基础上发展起来的,在具体处理时, 需要先将 RGB 转换为 XYZ
色彩空间,再将其转换到 CIEL
ab色彩空间

具体实现方法为:

相关推荐
HelloTonyGo8 分钟前
Ubuntu24.04 安装opencv4.10
opencv·ubuntu
sp_fyf_202415 分钟前
计算机人工智能前沿进展-大语言模型方向-2024-09-20
人工智能·搜索引擎·语言模型
kinlon.liu15 分钟前
AI与自然语言处理(NLP):中秋诗词生成
人工智能·自然语言处理
正义的彬彬侠33 分钟前
举例说明计算一个矩阵的秩的完整步骤
人工智能·机器学习·矩阵·回归
十有久诚1 小时前
E2VPT: An Effective and Efficient Approach for Visual Prompt Tuning
人工智能·深度学习·提示学习·视觉语言模型
卓_尔_不_凡1 小时前
Pytorch学习---基于经典网络架构ResNet训练花卉图像分类模型
人工智能·分类·数据挖掘
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(123)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
SEU-WYL1 小时前
基于神经网络的光线追踪
人工智能·神经网络·计算机视觉
Bill662 小时前
OpenCV GUI常用函数详解
人工智能·opencv·计算机视觉
DisonTangor2 小时前
OpenAI面向开发者继续提高o1系列模型的调用速率 最高每分钟可调用1000次
人工智能