原文件是yuv444的图像,有10帧,第一帧读取正确,到了之后的就变成了粉色的,应该怎么改呢?
#include<iostream>
#include<fstream>
using namespace std;
typedef struct YUVPixel {
short int Y;
short int U;
short int V;
} YUVPixel;
int main()
{
FILE* orignal_data = fopen("ParkScene_1920x1080_24_16bit_444.yuv", "r");//读取yuv文件
FILE* f_r = fopen("r_data2.yuv", "w");//存入/写入的文件
if (orignal_data == NULL)
printf("open file error:\n");
unsigned int width = 1920, height = 1080;//yuv大小已知
for(int k=0;k<10;k++)
{
short int* raw_16bit_pixels = (short int*)malloc(width * height * sizeof(YUVPixel));
fread(raw_16bit_pixels, 1, width * height * sizeof(YUVPixel), orignal_data); //暂时忽略其返回值
YUVPixel yuv_pixel;
unsigned char Ylow, Yhigh, Ulow, Uhigh, Vlow, Vhigh;
unsigned short int Ytemp, Utemp, Vtemp;
for (int j = 0;j < height;j++)
for (int i = 0;i < width;i++)
{
yuv_pixel.Y = raw_16bit_pixels[1920 * j + i];//读入Y
yuv_pixel.U = raw_16bit_pixels[1920 * j + i + 1920 * 1080];//读入U
yuv_pixel.V = raw_16bit_pixels[1920 * j + i + 1920 * 1080 * 2];//读入V
Ylow = (yuv_pixel.Y) & 0xff;
Yhigh = (yuv_pixel.Y) >> 8;
Ytemp = Yhigh;
Ytemp <<= 8;
Ytemp += Ylow;//Y的合成
Ulow = (yuv_pixel.U) & 0xff;
Uhigh = (yuv_pixel.U) >> 8;
Utemp = Uhigh;
Utemp <<= 8;
Utemp += Ulow;//U的合成
Vlow = (yuv_pixel.V) & 0xff;
Vhigh = (yuv_pixel.V) >> 8;
Vtemp = Vhigh;
Vtemp <<= 8;
Vtemp += Vlow;//V的合成
raw_16bit_pixels[1920 * j + i] = Ytemp;
raw_16bit_pixels[1920 * j + i + 1920 * 1080] = Utemp;
raw_16bit_pixels[1920 * j + i + 1920 * 1080 * 2] = Vtemp;
}
fwrite(raw_16bit_pixels, 1, width * height * sizeof(YUVPixel), f_r); //暂时忽略其返回值
free(raw_16bit_pixels);
}
fclose(f_r);
return 0;
}
第一帧
想全部帧数读取正确
用opencv读