YUV2RGB实验报告

本文详细介绍了YUV到RGB的颜色转换实验,包括转换公式、4:2:0采样方式、数据溢出处理和VS2013编译环境的注意事项。实验流程涉及读取文件、格式转换、文件写入,以及溢出问题的解决,通过对比验证显示了正确处理溢出后的图像质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.实验基本原理

RGB2YUV转换公式:

Y=0.2990*R+0.5870*G+0.1140*B

U=-0.1684*R-0.3316*G+0.5*B+128

V=0.5*R-0.4187*G-0.813*B+128

YUV2RGB转换公式:

B=Y+1.779(U-128)

G=Y-0.7169(V-128)-0.3455(U-128)

R=Y+1.14075(V-128)

YUV文件格式:

YUV按照4:2:0的方式取样,即色度信号在水平方向和垂直方向的取样频率是亮度信号的1/4。

先存储一帧中的所有Y数据,接着存储一帧中所有的U数据,再存储所有的V数据。

所占空间大小:weight*height*1(Y)+weight*height/4(U)+weight*height/4(V)=weight*height*3/2(byte)

RGB文件格式:

RGB按照4:4:4的方式取样。

顺序存储每一像素点的B,G,R数据。

所占空间大小:weight*height*1(B)+weight*height*1(G)+weight*height*1(R)=weight*height*3(byte)


因为两种文件格式大小不一样,所以在RGB转YUV时色差信号需要下采样,即经公式转换后,每相邻四个U值取平均作为最终U值进行存储。V同理。反之,在YUV转RGB时,每个色差信号值需作为相邻4个像素的U,V值,即上采样。

关于数据溢出:

由于RGB文件是8bit量化,而YUV文件经公式转化后数值有可能超出0~255范围,数据溢出(如256会变为0)会造成图像部分地方颜色显示错误。可以通过设置double型(字节数比unsigned char型多)中间变量存放转换结果,再通过if语句判断是否超出范围来确定R,G,B的最终值,防止数据溢出。

关于main函数:

带参数的main函数书写:int main(int argc,char* argv[ ])

其中argc为送入参数的个数,本实验中为5个;

argv[0]-->yuv2rgb.exe(缺省)

argv[1]-->up.yuv(输入文件)

argv[2]-->up.rgb(生成文件)

argv[3]-->256(输入文件宽)

argv[4]-->256(输入文件高)

具体操作:

项目属性-->配置属性-->调试-->更改参数命令和工作目录(文件打开路径)

关于输出:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值