clear all; clc;
fid = fopen('D:\mymatlab\imgredundancy\out.yuv'); %读入文件
A = fread(fid);
B = A;
row=768;col=1024; %图像的高、宽
frames=1; % 序列的帧数
for frame=1:frames
%读入文件 将yuv转换为rgb,并用imshow显示
% im_l_y=fread(fid,[row,col],'uchar'); %错误的读入
im_l_y = zeros(row,col); %Y
for i1 = 1:row
im_l_y(i1,:) = B(1:col,:); %读取数据到矩阵中
B(1:col,:) = [];
end
im_l_cb = zeros(row/2,col/2); %cb
for i2 = 1:row/2
im_l_cb(i2,:) = B(1:col/2,:);
B(1:col/2,:) = [];
end
im_l_cr = zeros(row/2,col/2); %cr
for i3 = 1:row/2
im_l_cr(i3,:) = B(1:col/2,:);
B(1:col/2,:) = [];
end
%由于输入的yuv文件为4:2:0,所以CbCr要改变大小,
%否则im_l_ycbcr(:, :, 2) =im_l_cb;会出现错误
im_l_cb = imresize(im_l_cb, [row, col], 'nearest');%改变图像的大小
im_l_cr = imresize(im_l_cr, [row, col], 'nearest');
im_l_ycbcr = zeros([row, col, 3]);
im_l_ycbcr(:, :, 1) = im_l_y;
im_l_ycbcr(:, :, 2) = im_l_cb;
im_l_ycbcr(:, :, 3) = im_l_cr;
im_l = ycbcr2rgb(uint8(im_l_ycbcr)); %将YCbCr转换为rgb
imshow(im_l);
imwrite(im_l,'rep.bmp');
end