视频开发基础(一)-色彩空间

84 阅读4分钟

色彩空间

不同的图像输出设备输出的图像是不同的,比如黑白电视与彩色电视,8bit的显示器与10bit的显示器,这是因为不同的设备支持的色彩空间不同,能展现的色彩明暗程度、颜色范围也不同。常见的色彩空间有:

  1. GRAY色彩空间
  2. RGB色彩空间
  3. YUV色彩空间
  4. HSL/HSV色彩空间
  5. CMYK色彩空间

有些资料把色彩空间又称为“色彩模型”,本质上都是使用不同的分量去表示一种颜色,从数学的概念上理解,可以把色彩空间看成不同的函数f(x, y, z),输入不同的变量后会得到一种颜色。

GRAY色彩空间

黑白电视支持的色彩空间是GRAY色彩空间,GRAY色彩空间只有一个颜色分量,即用灰度值表示画面中一个像素的色彩值。计算机中用8位的二进制表示弧度制,即取值范围是0-255,占用一个字节。举两个例子,0代表黑色像素点,255则是最亮的像素点。因此,GRAY色彩空间,可以看成只有一个变量的函数f(x),并且x的取值范围是0-255的闭区间。

vueresponse

灰度图占用空间 = 图片的宽 * 图片的高 * 1个字节

如80 * 80的灰度图是6400个字节

RGB色彩空间

一般,摄像头采集的原始图像就是RGB图像,显示器显示的图像也是RGB图像,在RGB色彩空间中,用R、G、B三个分量的值来表示一种颜色,函数关系就是f(r, g, b),对于一个8bit位深的RGB图像,三个分量的取值范围是0-255,即每个分量都占用一个字节,举几个例子RGB(0,0,0)代表黑色,RGB(255,255,255)代表白色,RGB(255, 0, 0)代表红色。

vueresponse

RGB图像占用空间 = 图片的宽 * 图片的高 * 1个字节

YUV色彩空间

YUV最早主要用于电视系统和模拟视频领域,现在视频领域通常用YUV的色彩空间,Y表示亮度值,UV表示色彩信息。如果一张图片只有Y分量,没有UV分量,就是一张灰度图,也就是没有色彩信息。

YUV格式可以很好地解决彩色电视和黑白电视的相容的问题,即一份视频数据,在黑白电视上只使用Y分量,显示黑白的图像,在彩色电视上使用YUV的全部数据,显示彩色图像。

vueresponse

因为人眼对亮度的变化比较敏感,对色彩的变化相对较弱,所以对图像采样时,一般对图像每个像素的Y分量进行全采样,对UV分量适当舍弃,如没2个或4个Y分量共用一组UV,这样也会降低图像占用的空间大小,节省带宽,降低视频传输的延迟。

常用的YUV格式包括(按不同的采样策略分类):

  • YUV444

  • YUV422

  • YUV420

  • YUV411

YUV格式的详细解释可以参考这篇www.jianshu.com/p/538ee63f4…

HSL/HSV色彩空间

HSL色彩空间包含的三个分量分别是色相(Hue)、饱和度( Saturation)、亮度( Lightness)。HSV 是色相(Hue)、饱和度( Saturation)和明度(Value)。色相(H)是色彩的基本属性,可以理解为一种主色调,也就是平常我们所说的颜色名称,比如蓝色、绿色等;饱和度(S)可以简单理解为色彩的纯度,该值越高色彩越纯,越低则逐渐变灰,取 0~100% 的数值;明度(V)和亮度(L),同样取 0~100% 的数值。

在HSL 和 HSV色彩空间中,三个分量和颜色的对应关系可以用圆柱坐标系来描述 ,这个圆柱的中心轴取值为自底部的黑色到顶部的白色,也就是亮度的变化,可以看成三维坐标系的z轴,中间的位置是灰色,即沿着这个轴的高度对应于“亮度”、“色调”或“明度”;绕这个轴的旋转角度的变化,则对应于“色相”的变化;到这个轴的距离变化则对应于“饱和度”的变化。

vueresponse

CMYK色彩空间

CMYK色彩空间是印刷专用的颜色表示方法,这里讨论的主要是计算机渲染图像时用到的色彩空间,暂不讨论,有兴趣的小伙伴可以查阅相关资料。