帮我解答一下这个matlab程序的问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 06:50:46
function frame2bmp(video,s,e,t,pickind)
y=e-s+1;
for n=1:t:y
a=video.frames(n).cdata;
strtemp=strcat('g:\转换的图片\',int2str(n),'.',pickind);
imwrite(a,strtemp);
end

这是一个用matlab将视频的每一帧转化为bmp格式的图像保存起来的程序~~不是我写的,所以看不懂。尤其是那个pickind参数,究竟代表什么?

哈哈,这个程序我用过。
根据lz的程序理解,
video是你电影读取到matlab中的程序,应该在主程序中有video=aviread('你电影的路径');这么一段吧?
s是你想截取图像的第一帧,e是你想截取图像的最后一帧,t是每隔多少帧你想截取一个图像,y是总共要截取的图像数目。a是图像的信息,你可以打开a看看,都是数字。pickind是截取的图像的后缀,如果你想要jpg,那就是pickind='jpg'; strtemp是图像保存的路径和文件名。imwrite是将刚才读出的图像信息保存到你所在的图像路径中去。

如果有不懂站内信哈。

但是lz的程序比较费内存,因为video需要将电影文件一下子全部读到matlab里面去,会很慢。
另外我给这个程序改了一下,avi_file是电影文件的路径,pic_file是存放图片的路径和文件名。
function avi2pic5(avi_file,pic_file)
movinfo=aviinfo(avi_file);
frame_num=movinfo.NumFrames;
frame_rate=movinfo.FramesPerSecond;
pic_kind='bmp';
i=1;
for n=1:frame_rate:frame_num
mov=mmread(avi_file,n);
pic_name=sprintf('%.4d',i);
strtemp=strcat(pic_file,'_',pic_name,'.',pic_kind);
imwrite(mov.frames.cdata(:,:,:),strtemp);
i=i+1;
end

video是指一个视频对象,应该可以用aviread之类的函数读入matlab
s是指起始帧数,e是指结束帧数,
t是起始帧数和结束帧数之间每个多少帧截取一个图像
s,e,t都是数字