用matlab读取avi电影(只能读一定压缩各式的avi电影)
aviinfo('d:\\j.avi'); %显示存在d盘的电影j.avi的信息
mov=aviread('d:\\j.avi'); %读入存在d盘的电影j.avi
movie(mov); %放映电影
将电影转成图片序列
mov=aviread('d:\\j.avi'); %读入
fnum=size(mov,2); %读取电影的祯数,mov为1*temp
for i=1:fnum
strtemp=strcat('d:\\转换的图片\\',int2str(i),'.','jpg');%将每祯转成jpg的图片
imwrite(mov(i).cdata(:,:,Smile,mov(i).colormap,strtemp);
end
(1)matlab中,可以调aviinfo函数,获取avi文件的属性信息,调用格式为:
info=aviinfo('…\\...\\filiname.avi')
(2)aviread :Read Audio/Video Interleaved (AVI) file
mov = aviread(filename)
mov = aviread(filename, index) %可以按如下方式使用
for index=n:m % Reads from frame m to frame n,n,m应该在1-size(mov,2)范围内
mov(index)=aviread(mov,index);
end
只能读取未压缩的avi文件(因为avi格式是N多视频格式的统称)
注:如果avi文件为压缩形式的则可以采用第三方软件将其进行格式转换
(3)Windows Platform下最方便的是用mmreader函数(其支持多种格式,详见help)然后用read函数读取(但这个函数貌似高级的版本才有)
mov = mmreader(filename);
注:mov是一个结构体数组,size(mov)返回avi文件的帧数
Mov有两个属性——cdata 和colormap.(help aviread)
mov(i).cdata 为第i帧图像的数据形式,采用image(mov(i).cdata)可以以图的方式显示第i帧图像。
(4) 播放视频文件
Movie(mov) % mov变量为aviread\\mmreader的返回结果
(5)存储帧图片
fnum=size(mov,2); % 读取电影的祯数mov为1*temp
for i=1:fnum
strtemp=strcat( filepath, int2str(i),'.',format); %将每祯转成format格式的图片存储在指定路径
imwrite(mov(i).cdata(:,:,:),mov(i).colormap,strtemp));
end
clear;clc;
tic
p=imread('lena100.bmp');
[rsize,csize]=size(p);
r=10;
kernelbase = zeros(2*r+1,2*r+1,1,1);
phibase = zeros(1,10);
for i=1:rsize-2*r
for j=1:csize-2*r
c1(j)= j;
c2(j)= j+2*r;
r1(i)= i;
r2(i)= i+2*r;
kernelbase(:,:,i,j)= p(r1(i):r2(i), c1(i):c2(i));
%[order1,repetition1,phibase(:,:,i,j)] = PCET_func(kernelbase(:,:,i,j),2);
[order1,repetition1,phibase(:,:,i,j)] = zernike(kernelbase(:,:,i,j),3);
end
end