RGB是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统通道之一。
YUV是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制式采用的颜色空间。在现代彩色电视系统中,通常采用三管彩色摄影机或彩色CCD摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号B-Y(即U)、R-Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这种色彩的表示方法就是所谓的YUV色彩空间表示。采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的
2.YUV和RGB的转换:
3.YUV(YCbCr)采样格式:
上边仅给出了理论上的示例,在实际数据存储中是有可能是不同的,下面给出几种具体的存储形式:
(1) YUV 4:4:4
YUV三个信道的抽样率相同,因此在生成的图像里,每个象素的三个分量信息完整(每个分量通常8比特),经过8比特量化之后,未经压缩的每个像素占用3个字节。
下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
存放的码流为: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
(2) YUV 4:2:2
每个色差信道的抽样率是亮度信道的一半,所以水平方向的色度抽样率只是4:4:4的一半。对非压缩的8比特量化的图像来说,每个由两个水平方向相邻的像素组成的宏像素需要占用4字节内存(例如下面映射出的前两个像素点只需要Y0、Y1、U0、V1四个字节)。
下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
存放的码流为: Y0 U0 Y1 V1 Y2 U2 Y3 V3
映射出像素点为:[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]
(3)YUV 4:2:0
4:2:0并不意味着只有Y,Cb而没有Cr分量。它指得是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0...以此类推。对每个色度分量来说,水平方向和竖直方向的抽样率都是2:1,所以可以说色度的抽样率是4:1。对非压缩的8比特量化的视频来说,每个由2x2个2行2列相邻的像素组成的宏像素需要占用6字节内存。
下面八个像素为:
[Y5 U5 V5] [Y6 U6 V6] [Y7U7 V7] [Y8 U8 V8]
存放的码流为:
Y5 V5 Y6 Y7 V7 Y8
映射出的像素点为:
4.转换公式代码
- void rtRGB2YUV(RtScalar rgb, RtScalar& yuv)
- {
- yuv.val[0] = 0.299*rgb.val[0] + 0.587*rgb.val[1] + 0.114*rgb.val[2]; // y
- yuv.val[1] = -0.147*rgb.val[0] - 0.289*rgb.val[1]+ 0.436*rgb.val[2]; // u
- yuv.val[2] = 0.615*rgb.val[0] - 0.515*rgb.val[1] - 0.1*rgb.val[2]; // v
- }
- // YUV转换为RGB
- void rtYUV2RGB(RtScalar yuv, RtScalar& rgb)
- {
- rgb.val[0] = yuv.val[0] + 1.14*yuv.val[2]; // r
- rgb.val[1] = yuv.val[0] - 0.39*yuv.val[1] - 0.58*yuv.val[2];
- rgb.val[2] = yuv.val[0] + 2.03*yuv.val[1];
- }
WAV文件通常采用的音频编码方式是脉冲编码调制(PCM)。因为WAV格式源自windos/intel环境,因而采用的Little Endian字节顺序存储。
WAV文件容量=(采样频率 ×采样位数 ×声道)×时间/8 (1字节=8bit)
WAV文件由若干个帧组成。按照在文件中的出现位置包括:RIFFWAVE帧、Format帧、Fact帧(可选)、Data帧。
除了Fact帧外,其他3个帧都是必须的。每个帧有各自的ID,位于该帧最开始位置,均为4个字节。紧跟在ID后面的是帧的大小,大小为4字节(小端方式)。
(1)RIFF WAVE帧
名称 | 长度 | 具体内容 |
ID | 4 Bytes | ‘RIFF’ |
Size | 4 Bytes | FileLen-8, 整个文件大小-8 |
Type | 4 Bytes | ‘WAVE’ |
(2)Format帧
此帧一般情况下为16字节,此时最后附加信息没有;如果为18字节,则最后,多了两个字节的附加信息。
名称 | 字节数 | 具体内容 |
ID | 4 | fmt |
Size | 4 | 16或18(数值), 18则最后有附加信息 |
FormatTag | 2 | 编码方式,一般为0x0001 |
Channels | 2 | 声道数目,1-单声道,2-双 |
SamplesPerSec | 4 | 采样频率 |
AvgBytesPerSec | 4 | 每秒所需字节数 |
BlockAlign | 2 | 数据块对齐单位(每个采样需要的字节数) |
BitsPerSample | 2 | 每个采样需要的bit数 |
附加信息 | 2 | 附加信息(可选,通过Size判断有无) |
(3)Fact帧
当WAV文件是由某些软件转化而成时可能包含的帧。
名称 | 所占字节数 | 具体内容 |
ID | 4 | “fact” |
Size | 4 | 数值4 |
data | 4 | “WAVE” |
(4)Data帧
保存WAV音频数据的地方。
名称 | 所占字节数 | 具体内容 |
ID | 4 | “data” |
Size | 4 |
|
data |
| WAV音频数据 |