大家好,今天我们学习内容是“色彩空间”,在此之前,我们先来看一看什么是色彩空间!
色彩空间的概念
色彩模型是描述使用一组值表示颜色方法的抽象数学模型。例如 三原色光模式(RGB) 和印刷四分色模式(CMYK) 都是色彩模型。但是一个与绝对色彩空间没有函数映射关系的色彩模型或多或少地都是与特定应用要求几乎没有关系的任意色彩系统。在色彩模型和一个特定的参照色彩空间之间加入一个特定的映射函数就在参照色彩空间中出现了一个明确的"footprint"。这个 "footprint" 称为色域,并且与色彩模型一起定义为一个新的色彩空间。例如 Adobe RGB 和 sRGB 是两个基于 RGB 模型的不同绝对色彩空间。
常见的色彩空间
RGB
{callout color="#ef9b4d"}
RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是运用最广的颜色系统之一。
{/callout}
HSV
{callout color="#ef9b4d"}
HSV是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。
{/callout}
HIS
{callout color="#ef9b4d"}
HIS是从人的视觉系统出发,用色调(Hue)、色饱和度(Saturation)和亮度(Intensity)来描述颜色的一种方法。
{/callout}
YCrCb
{callout color="#ef9b4d"}
YCrCb主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视。其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。“色度”则定义了颜色的两个方面─色调与饱和度,分别用Cr和Cb来表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。
{/callout}
YUV
{callout color="#ef9b4d"}
YUV,是一种颜色编码方法,常使用在各个视频处理组件中。 YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。“Y”表示明亮度(Luminance或Luma),也就是灰阶值,“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
{/callout}
色彩空间的相互转换
最常见的两个
{callout color="#ef4d4d"}
- HSV与RGB
YUV与RGB
{/callout}完整代码
import cv2 as cv
import numpy as np
def color_space_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGRA2GRAY)
cv.imshow("gray", gray)
hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)
cv.imshow("hsv", hsv)
yuv = cv.cvtColor(image, cv.COLOR_BGR2YUV)
cv.imshow("yuv", yuv)
ycrcb = cv.cvtColor(image, cv.COLOR_BGR2YCrCb)
cv.imshow("ycrcb", ycrcb)
rgb = cv.cvtColor(image, cv.COLOR_BGR2RGB)
cv.imshow("rgb", rgb)
print("---------Hello Python---------")
src = cv.imread("E:/gan/ma.webp")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
color_space_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
显示结果