数字视频实验一、二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一:读取YUV视频文件学时安排:2
实验类别:课内实验
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄一、实验目的和任务
熟悉MA TLAB软件开发环境,了解YUV色彩模型,编写MA TLAB程序读取YUV 格式视频文件及各分量数据。
二、实验原理
利用MATLAB图像处理工具箱中的函数,在MATLAB编程环境下,实现YUV序列图像及各分量数据的读取。
三、实验内容和步骤
1.运行MA TLAB集成开发环境,编写MATLAB程序读取YUV视频文件,对YUV各分量进行提取、观察和比较。
2.编写RGB和YUV视频文件转换程序
3.课后撰写实验报告。
(—)读取YUV格式视频并提取分量
1)读取YUV格式文件
程序如下:
%¶ÁÈ¡YUV¸ñʽÎļþÐÅÏ¢
function YUV_ReadShow(filename,frameNumMax,formatT)
if nargin==0
frameNumMax = 100;
formatT = 'qcif'; %yuv¸ñʽÎļþÀàÐÍ
filename = 'C:\Documents and
Settings\Administrator\×ÀÃæ\akiyo_qcif.yuv';%'foreman.qcif';%YUV¸ñʽÎļþ
end
% ³õʼ»¯Ö¡¸ñʽ
switch formatT
case'qcif'
H = 144; % ¸ß
W = 176; % ¿í
case'cif'
H = 288; % ¸ß
W = 352;% ¿í
otherwise
H = 480;% ¸ß
W = 720;% ¿í
end
for frameNum = 1:frameNumMax;
% ¶ÁÈ¡YUV¸ñʽÎļþÄÚÈÝ
[Y,U,V]=yuv_import(filename,[W,H],1,frameNum);
tmp = Y{1};
% ÏÔʾYUV¸ñʽµÄͼƬ
img1 = zeros(H+H/2,W);
img1(1:H,:) = Y{1};
img1(H+1:end,1:W/2) = V{1};
img1(H+1:end,W/2+1:end) = U{1};
subplot(121),imshow(uint8(img1));
pause(1/30); % ÔÝÍ£ÒÔÏÔʾÊÓƵ¶¯»-
end
%YUV¸ñʽµÄͼƬװÔØ
function [Y,U,V]=yuv_import(filename,dims,numfrm,startfrm) fid=fopen(filename,'r');
if (fid < 0)
error('File does not exist!');
end;
Yd = zeros(dims(1),dims(2));
UVd = zeros(dims(1)/2,dims(2)/2);%UV·ÖÁ¿µÄλÖÃ
frelem = numel(Yd) + 2*numel(UVd); %ÊÓƵͼÏñÏÔʾµÄ¿í¶È
if (nargin == 4) %go to the starting frame
fseek(fid,startfrm * frelem , 0);
end;
Y = cell(1,numfrm);
U = cell(1,numfrm);
V = cell(1,numfrm);
for i=1:numfrm
Yd = fread(fid,[dims(1) dims(2)],'uint8');
Y{i} = Yd';%תÖÃ
UVd = fread(fid,[dims(1)/2 dims(2)/2],'uint8');
U{i} = UVd';
UVd = fread(fid,[dims(1)/2 dims(2)/2],'uint8');
V{i} = UVd';
end;
fclose(fid);
结果如下:
2)分量提取
程序如下:
%读取YUV格式视频程序
function yuv
[fname,pname]=uigetfile('*.yuv;*.jqcif');%获得文件路径
FileName=fullfile(pname,fname); %选择文件
FileLength=length(FileName);%获取文件名长度
%判断打开的是YUV格式视频还是QCIF格式图片,并设置相应的像素大小if(FileName(FileLength-2:1:FileLength)=='yuv')
wide=176*2;
high=144*2;
end
if(FileName(FileLength-3:1:FileLength)=='qcif')
wide=176;
high=144;
end
File=fopen(FileName);%打开文件
framenumber=input('读取第几帧:');
%从第framenumber帧开始读取数据