我们在视频数据传输前,都要使用相应的压缩算法来转换压缩数据,比如压缩成H264和H265,这两种基本上都是在YUV颜色空间上进行的。但是如果采集源采集的数据不是YUV的,在压缩前就需要转换,例如摄像头采集的资源是RGB的,那么首先要转换为YUV,再进行压缩。
在了解压缩算法之前,先看一下颜色空间转换的原理。以1920*1080的一帧图像为例RGB24的排列方式如下图所示:
每个像素点有三个字节组成分别表示R,G,B分量上的颜色值。在数据中的表示方式为一个像素 一个像素表示。字节流可以表述如下:
BGRBGRBGRBGRBGR……
|---------------1920*1080*3-------|
每一个字母表示一个字节,也就是该颜色分量的数值,相邻的三个BGR字节表示一个像素点。在我们做计算时,通常一次取三个字节,也就是一个像素点。
相应的YV12的排列方式如下图所示:
每个像素点都有一个Y分量,每隔一列就有一个U或者V分量,U和V交替出现。YV12的字节流表示方式和RGB24有很大区别,YV12并不是按照像素依次排列的,而是先放置Y空间,然后放置整个V空间,最后放置U空间,那么字节流如下所示:
YYYYYYY……VVVV……UUUU……
|-