数据压缩原理与应用 实验一 彩色空间转换(YUVtoRGB)

一、本实验涉及到的基本原理

1.彩色空间转换的基本思想及转换公式

(1)YUV与RGB空间的相互转换(为了使色差信号的动态范围控制在0.5之间,需要进行归一化):

Y=0.2990R+0.5870G+0.1140B

U=-0.1684R-0.3316G+0.5B

V=0.5R-0.4187G-0.0813B

(2)RGB与YUV空间的相互转换

R=Y+1.14075(V-128)

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

B=Y+1.779(U-128)

(3)色度格式

4:2:0格式是指色差信号U,V的取样频率为亮度信号取样频率的四分之一,在水平方向和垂直方向上的取样点数均为Y的一半。

(4)YUV与RGB存储方式

YUV文件采用平面(Planer)格式,使用三个数组分开存放每一帧的Y、U、V三个分量。

RGB文件采用打包(Packed)格式,将每一帧的每个像素点依照B、G、R的顺序存放在同一个数组中。

二、YUVtoRGB文件转换流程分析

1. 程序初始化(打开两个文件、定义变量和缓冲区 程序初始化(打开两个文件、定义变量和缓冲区等)

2. 读 读取 取YUV 文件,抽取YUV数据写入缓冲区 数据写入缓冲区

3.  调用YUV2RGB 的函数实现YUV 到RGB数据的转 数据的转换

4.  写RGB文件 文件

5. 程序收尾工作(关闭文件,释放缓冲区)

三、关键代码及其分析

1.YUVtoRGB.h

#ifndef YUV2RGB_H_
#define YUV2RGB_H_

int YUVtoRGB (int x_dim, int y_dim, void *bmp, void *y_out, void *u_out, void *v_out, int flip);

void InitLookupTable();

#endif
2.main.cpp

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "YUVtoRGB.h"									//自己定义的头文件

#define u_int8_t	unsigned __int8							//无符号8位整形
#define u_int		unsigned __int32						//无符号4字节整形
#define u_int32_t	unsigned __int32
#define FALSE		false
#define TRUE		true

int main(int argc, char** argv)
{
	/* variables controlable from command line */
	u_int frameWidth = 352;			/* --width=<uint&g
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值