一.实验原理
(1)YUV与RGB空间的相互转换
亮度和色差信号的构成如下:
Y = 0.2990R + 0.5870G + 0.1140B
R-Y = 0.7010R - 0.5870G - 0.1140B
B-Y = -0.2990R - 0.5870G + 0.8860B
为了使色差信号的动态范围控制在0.5之间,需要进行归一化,对色差信号引入压缩系数。归一化后的色差信号为:
U = -0.1684R - 0.3316G + 0.5B
V = 0.5R - 0.4187G - 0.0813B
由此可得YUV转RGB公式:
R = Y + 1.14075(V - 128)
G = Y - 0.7169(V - 128) - 0.3455(U - 128)
B = Y + 1.779(U - 128)
(2)存储方式与所占空间
一帧YUV图像在存储方式上,先存这一帧所有的Y数据,再存这一帧所有的U数据,最后存这一帧所有的V数据。YUV的取样格式为4:2:0(即色差信号U,V的取样频率为亮度信号取样频率的四分之一,在水平方向和垂直方向上的取样点数均为Y的一半),所以一帧YUV图像所占空间大小为: 宽x高x1.5。
而RGB在存储方式上,按照B,G,R的顺序,连续存储每个像素的BGR数据,所以一帧RGB所占空间大小为: 宽x高x3。
因此,在RGB转YUV的实验中需用下采样的方式;在YUV转RGB的实验中需要用上采样的方式
二.实验流程分析
1.程序初始化(打开两个文件,定义变量和缓冲区)
2.读取YUV文件,抽取YUV数据写入缓冲区
3.调用YUV2RGB的函数实现YUV到RGB数据的转换
4.写RGB文件
5.程序收尾工作(关闭文件,释放缓冲区)
三.关键代码及其分析
main.cpp与yuv2rgb.cpp
#include
#i