读取4:2:0格式YUV序列的Y分量、U分量以及V分量,并分别保存为.yuv格式,不多说,具体程序如下:
read_Y_U_V.m
%% 读取4:2:0格式YUV的Y、U和V分量,然后将三个分量分别保存为.yuv格式
clear
clc
%% Read yuv from file
row=144; % 长度
col=176; % 宽度
fnum=300; % 帧数
yuvseq = 'foreman_qcif_300.yuv'; % 输入yuv序列名称
len=length(yuvseq);
yuvName=yuvseq(1:len-4);
fid = fopen(yuvseq, 'r');
rec_Y=zeros(col,row,fnum);
rec_U=zeros(col/2,row/2,fnum);
rec_V=zeros(col/2,row/2,fnum);
for f=1:fnum
[rec_Y(:,:,f),count] = fread(fid,[col,row],'uchar');
[rec_U(:,:,f),count1]=fread(fid,[col/2,row/2],'uchar');
[rec_V(:,:,f),count2]=fread(fid,[col/2,row/2],'uchar');
end
filename_Y=sprintf('%s%s',yuvName,'_Y.yuv'); %% 生成.yuv名称
outfid_Y=fopen(filename_Y,'wb');
filename_U=sprintf('%s%s',yuvName,'_U.yuv');
outfid_U=fopen(filename_U,'wb');
filename_V=sprintf('%s%s',yuvName,'_V.yuv');
outfid_V=fopen(filename_V,'wb');
for f=1:fnum
pic_Y=uint8(rec_Y(:,:,f)'); %% '代表转置操作
fwrite(outfid_Y,rec_Y(:,:,f), 'uint8');
imshow(pic_Y); %% 将每个矩阵显示为图片
end
for f=1:fnum
pic_U=uint8(rec_U(:,:,f)');
fwrite(outfid_U,rec_U(:,:,f), 'uint8');
imshow(pic_U);
end
for f=1:fnum
pic_V=uint8(rec_V(:,:,f)');
fwrite(outfid_V,rec_V(:,:,f), 'uint8');
imshow(pic_V);
end
fclose(fid);
fclose(outfid_Y);
fclose(outfid_U);
fclose(outfid_V);