(1) RGB格式简介
RGB色彩模式是一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的。图像中每一个像素的RGB分量都分配一个0~255范围内的强度值。这个标准几乎包括了人类视力所能感知的所有颜色,主要应用在显示器上。
(2) YUV格式简介
YUV是一种颜色编码方法。Y'UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV。“Y”表示明亮度(Luminance、Luma),“U”和“V”则是色度、浓度(Chrominance、Chroma)。RGB诉求于人眼对色彩的感应,YUV则着重于视觉对于亮度的敏感程度。采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只保留Y信号分量去掉U、V分量,那么这样表示的图像就是黑白灰度图像,从而实现使黑白电视机也能接收彩色电视信号。
YUV主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4。因为摄像头常见的输入格式为YUV 4:2:2,所以本文主要介绍YUV4:2:2.
YUV 4:2:2采样格式的每个色差信道的采样率是亮度信道的一半。例如两个像素点的Y,U,V值依次为:[Y0 U0 V0] [Y1 U1 V1]。采样后的码流为:Y0 U0 Y1 V1。 最后显示时的像素点又还原为:[Y0 U0 V1] [Y1 U0 V1]。显然舍弃了V0,U1,这样可以减少传输时占用的带宽,而且对画质并没有很大影响,因为人眼对彩度的敏感度远不如亮度,而亮度信息并没有减少。
(3) YUV与RGB格式的转换
需要将摄像头输出的YUV格式的图像数据,通过libjpeg压缩为JPEG。但是libjpeg不支持直接压缩YUV,所以本文先将YUV数据转换成RGB再调用libjpeg库来压缩成JPEG。
YUV转换为RGB只需要通过公式简单换算即可,具体换算方法见YUYV压缩为JPEG的函数compress_yuyv_to_jpeg。