一、实验要求
将YUV格式的图像转为RGB格式
二、实验思路
先将down.yuv的4:2:0格式转为4:4:4格式,再通过公式转为rgb格式。
R=Y+1.403×(V−128)
G=Y–0.344×(U–128)–0.714×(V–128)
B=Y+1.772×(U–128)
三、试验记录
1、RGB TO YUV
仔细研究了老师给的代码并进行了测试:
命令参数:down.rgb down1.yuv 256 256
2、YUV TO RGB
命令参数:down.yuv down1.rgb 256 256
yuv2rgb.h
int YUV2RGB (int x_dim, int y_dim, void *bmp, void *y_out, void *u_out, void *v_out, int flip);
void InitLookupTable();
main.cpp
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include "yuv2rgb.h"
#define u_int8_t unsigned __int8
#define u_int unsigned __int32
#define u_int32_t unsigned __int32
#define FALSE false
#define TRUE true
int main(int argc, char** argv)
{
u_int frameWidth = 352;
u_int frameHeight = 240;
bool flip = TRUE;
unsigned int i;
char* yuvFileName = NULL;
char* rgbFileName = NULL;
FILE* yuvFile = NULL;
FILE* rgbFile = NULL;
u_int8_t* rgbBuf = NULL;
u_int8_t* yuvBuf = NULL;
u_int8_t* yBuf = NULL;
u_int8_t* uBuf = NULL;
u_int8_t* vBuf = NULL;
u_int32_t videoFramesWritten = 0;
yuvFileName = argv[1];
rgbFileName = argv[2];
frameWidth = atoi(argv[3]);
frameHeight = atoi(argv[4]);
//open the YUV file
yuvFile = fopen(yuvFileName, "rb");
if (yuvFile == NULL)
{
printf("cannot find yuv file\n");
exit(1);
}
else
{
printf("The input yuv file is %s\n", yuvFileName);
}
//open the RAW file
rgbFile = fopen(rgbFileName, "wb");
if (rgbFile == NULL)
{
printf("cannot find rgb file\n");
exit(1);