资源描述:
《数字视频实验一、二.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验一:读取YUV视频文件学时安排:2实验类别:课内实验 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄一、实验目的和任务熟悉MATLAB软件开发环境,了解YUV色彩模型,编写MATLAB程序读取YUV格式视频文件及各分量数据。二、实验原理利用MATLAB图像处理工具箱中的函数,在MATLAB编程环境下,实现YUV序列图像及各分量数据的读取。三、实验内容和步骤1. 运行MATLAB集成开发环境,编写MATLAB程序读取YUV视频文件,对YUV各分量进行提取、观察和比较。2. 编写RGB和YUV视频文件转换程序3. 课后撰写实验报告。(—)读取YUV格式视频并提取
2、分量1)读取YUV格式文件程序如下:%¶ÁÈ¡YUV¸ñʽÎļþÐÅÏ¢functionYUV_ReadShow(filename,frameNumMax,formatT)ifnargin==0frameNumMax=100;formatT='qcif';%yuv¸ñʽÎļþÀàÐÍfilename='C:DocumentsandSettingsAdministrator×ÀÃæakiyo_qcif.yuv';%'foreman.qcif';%YUV¸ñʽÎļþend%³õʼ»¯Ö¡¸ñʽswitchformatTcase'qcif'H=144;%¸ßW=1
3、76;%¿ícase'cif'H=288;%¸ßW=352;%¿íotherwiseH=480;%¸ßW=720;%¿íendforframeNum=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(u
4、int8(img1));pause(1/30);%ÔÝÍ£ÒÔÏÔʾÊÓƵ¶¯»end%YUV¸ñʽµÄͼƬװÔØfunction[Y,U,V]=yuv_import(filename,dims,numfrm,startfrm)fid=fopen(filename,'r');if(fid<0)error('Filedoesnotexist!');end;Yd=zeros(dims(1),dims(2));UVd=zeros(dims(1)/2,dims(2)/2);%UV·ÖÁ¿µÄλÖÃfrelem=numel(Yd)+2*numel(UVd);%ÊÓƵͼÏñÏ
5、ÔʾµÄ¿í¶Èif(nargin==4)%gotothestartingframefseek(fid,startfrm*frelem,0);end;Y=cell(1,numfrm);U=cell(1,numfrm);V=cell(1,numfrm);fori=1:numfrmYd=fread(fid,[dims(1)dims(2)],'uint8');Y{i}=Yd';%תÖÃUVd=fread(fid,[dims(1)/2dims(2)/2],'uint8');U{i}=UVd';UVd=fread(fid,[dims(1)/2dims(2)/2],'uint8');V{i
6、}=UVd';end;fclose(fid);结果如下:2)分量提取程序如下:%读取YUV格式视频程序functionyuv[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;endif(Fil
7、eName(FileLength-3:1:FileLength)=='qcif')wide=176;high=144;endFile=fopen(FileName);%打开文件framenumber=input('读取第几帧:');%从第framenumber帧开始读取数据fseek(File,(framenumber-1)*high*wide*3/2,'bof');%读取相应分量数据Y=double(fread(File,[wide,high],'uint8'))'