数字视频实验一、二

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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帧开始读取数据

相关文档
最新文档