色彩空间与通道
色彩空间(Color Space)是指用来描述和表示图像颜色的一种方式。不同的色彩空间具有不同的颜色模型和表示方式,常见的色彩空间包括 RGB、CMYK、HSV、Lab 等。
通道(Channel)是指在某种色彩空间中独立表示颜色信息的分量。每个通道负责记录特定颜色分量的强度或亮度。常见的图像通道包括红色通道(R)、绿色通道(G)和蓝色通道(B)。
常见的色彩空间和通道有:
RGB 色彩空间:
通道:红色通道 ®、绿色通道 (G)、蓝色通道 (B)。
描述:通过组合不同强度的红、绿、蓝三原色来表示所有可能的颜色。
RGB色彩空间是一种基于三原色的色彩模型,广泛应用于电子显示设备和计算机图形处理。在 RGB 色彩空间中,每个通道的取值范围通常是从 0 到 255,表示相应颜色分量的强度,其中 0 表示没有该颜色分量的贡献,255 表示最大强度。
通过不同强度的红、绿、蓝三个通道的组合,可以创建各种各样的颜色。例如,当红色通道为最大值(255),而绿色和蓝色通道都为最小值(0)时,得到的颜色就是纯红色。类似地,当红色和绿色通道都为最大值,而蓝色通道为最小值时,得到的颜色就是黄色。
在计算机图形处理中,我们可以通过控制 RGB 值来改变图像的颜色。调整不同通道的强度可以实现亮度、对比度、色调等颜色效果的变化。此外,使用 RGB 色彩空间还可以进行图像的合成、混合和颜色校正等操作。
import cv2
image = cv2.imread("C:/Users/ping/Desktop/photo.jpg")
image_rgb = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
r,g,b = cv2.split(image_rgb)
cv2.imshow("r",r)
cv2.imshow("g",g)
cv2.imshow("b",b)
RGB = cv2.merge([r,g,b])
cv2.imshow("RGB",RGB)
cv2.waitKey()
cv2.destroyAllWindows()
CMYK 色彩空间:
通道:青色通道 ©、品红通道 (M)、黄色通道 (Y)、黑色通道 (K)。
描述:通过组合不同程度的青、品红、黄、黑四个颜料的覆盖来表示颜色。
CMYK色彩空间是一种用于打印和印刷领域的颜色模型,它由青色(Cyan)、品红色(Magenta)、黄色(Yellow)和黑色(Key)四个颜色分量组成。每个分量的取值范围是0到100。
青色(Cyan):表示蓝绿色,较高的青色分量表示较多的青色。
品红色(Magenta):表示洋红色或紫红色,较高的品红色分量表示较多的品红色。
黄色(Yellow):表示黄色,较高的黄色分量表示较多的黄色。
黑色(Key):在CMYK色彩中,黑色也被称为Key色,通常用于调整亮度和对比度,较高的黑色分量表示较暗的色彩。
CMYK色彩空间的运用适用于印刷领域,因为它可以通过叠加不同颜色的墨水来实现广泛的颜色范围。与RGB色彩空间相比,CMYK色彩空间的颜色表示能力更适合印刷,但在显示设备上可能无法完全准确地显示出所期望的颜色效果。因此,当制作设计作品时,通常需要注意RGB和CMYK之间的转换以确保颜色的一致性。
HSV 色彩空间:
通道:色调通道 (H)、饱和度通道 (S)、亮度通道 (V)。
描述:色调表示颜色类型,饱和度表示颜色的纯度,亮度表示颜色的明暗程度。
HSV色彩空间是一种将颜色表示为色相(Hue)、饱和(Saturation)和明度(Value)三个分量的方式。每个分量都有其特定的取值范围:
色相(Hue):表示颜色的类型或种类,以角度为单位表示,取值范围是0到360度。0度对应红色,120度对应绿色,240度对应蓝色,以此类推。
饱和度(Saturation):表示颜色的鲜艳程度或纯度,取值范围是0到1.0,0表示灰度色彩(无色彩),1.0表示完全饱和的纯色。
明度(Value):表示颜色的亮度或明暗程度,取值范围是0到1.0,0表示最暗的黑色,1.0表示最亮的白色。
HSV色彩空间的优点在于它与人眼对颜色的感知方式较为一致,相比于RGB色彩空间,更容易理解和操作。例如,通过调整色相、饱和度和明度的值,可以实现颜色的调色、变换、增加饱和度或降低饱和度等效果。
import cv2
image = cv2.imread("C:/Users/ping/Desktop/photo.jpg")
image_hsv = cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
h,s,v = cv2.split(image_hsv)
cv2.imshow("h",h)
cv2.imshow("s",s)
cv2.imshow("v",v)
HSV = cv2.merge([h,s,v])
cv2.imshow("HSV",HSV)
cv2.waitKey()
cv2.destroyAllWindows()
Lab 色彩空间:
通道:亮度通道 (L)、绿-红通道 (a)、蓝-黄通道 (b)。
描述:亮度通道表示颜色的亮度,绿-红通道和蓝-黄通道表示颜色在红绿和蓝黄之间的偏移。
Lab(也称为CIELAB)色彩空间是一种与人类感知颜色相关的设备无关的色彩模型。它包含了亮度(L)通道和两个色度通道(a和b),用于描述颜色的明暗度和颜色的绿红和蓝黄分量。Lab色彩空间是基于对颜色感知的科学研究而定义的。
亮度(L):表示颜色的明暗程度,取值范围为0至100。0表示黑色,100表示白色。
色度a:表示从绿色到红色的范围,负值表示绿色,正值表示红色。
色度b:表示从蓝色到黄色的范围,负值表示蓝色,正值表示黄色。
Lab色彩空间的一个重要特性是其均匀性,即在此色彩空间中,相等距离的颜色变化在人眼中被认为是均匀的。这使得在Lab色彩空间中进行颜色调整和比较更为方便。另外,由于其与设备无关,Lab色彩空间通常用于颜色管理、色彩校准以及色彩转换等领域。
RGBA 色彩空间
BGRA色彩空间是一种常用于计算机图形和图像处理中的色彩模型。它由蓝色(Blue)、绿色(Green)、红色(Red)和Alpha通道(Opacity)四个分量组成。
蓝色(Blue):表示颜色中的蓝色分量,取值范围是0到255。
绿色(Green):表示颜色中的绿色分量,取值范围是0到255。
红色(Red):表示颜色中的红色分量,取值范围是0到255。
Alpha通道(Opacity):表示颜色的透明度,也被称为不透明度。取值范围是0到255,其中0表示完全透明,255表示完全不透明。
BGRA色彩空间经常用于计算机图形和图像处理中,特别是在使用像素级别操作时。它可以描述一个像素的颜色以及透明度信息,因此在图像合成、图像叠加、透明度混合等处理中非常有用。例如,在图像编辑软件中,我们可以通过调整BGRA分量的值来改变图像的颜色、亮度和透明度。
import cv2
bgr_image = cv2.imread("C:/Users/ping/Desktop/photo.jpg")
bgra_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2BGRA)
cv2.imshow("BGRA", bgr_image)
b, g, r, a = cv2.split(bgra_image)
a[:, :] = 250 # 将BGRA图像的透明度调整为172(半透明)
bgra_172 = cv2.merge([b, g, r, a]) # 合并拆分后并将透明度调整为172的通道图像
a[:, :] = 50 # 将BGRA图像的透明度调整为0(透明)
bgra_0 = cv2.merge([b, g, r, a]) # 合并拆分后并将透明度调整为0的通道图像
cv2.imshow("A = 172", bgra_172) # 显示透明度为172的BGRA图像
cv2.imshow("A = 0", bgra_0) # 显示透明度为0的BGRA图像
cv2.waitKey()
cv2.destroyAllWindows()
函数说明:
cv2.split()
planes = cv2.split(src)
src:输入的多通道图像,可以是NumPy数组或其他图像数据类型。
planes:包含分割后的单通道图像的列表。每个元素都是一个NumPy数组,表示一个通道的图像。
cv2.cvtColor()
cv2.cvtColor(src, code[, dst[, dstCn]])
src:输入图像,可以是 NumPy 数组或其他
图像数据类型。
code:要进行的颜色空间转换代码。可以使
用 OpenCV 中定义的预定义常量(例如 cv2.
COLOR_BGR2GRAY)。
dst(可选):输出图像,用于保存转换后的
结果。如果未提供此参数,则函数会创建一个
与 src 相同大小和类型的输出图像。
dstCn(可选):输出图像的通道数。默认值
为0,表示与输入图像的通道数保持一致。
cv2.merge()
cv2.merge(channels)
channels:包含要合并的单通道图像的列表。
每个元素都是一个NumPy数组,表示一个通道的图像。