matlab使用avifile制作视频、VideoReader读取视频和movie函数将图片以视频方式播放

来源:互联网 发布:传智播客35期java 编辑:程序博客网 时间:2024/04/30 11:59

系统环境:matlab2012a+win7

一 、avifile制作视频:

clc;clear;close all;
f_str=1;f_end=630; % 起始和结束帧
r_path='图片读取路径';

video_name='video‘; %你想制作的视频名称

aviobj=avifile(video_name); %此时你可以看见在当前文件夹下创建了一个avi视频文件(是空的)
aviobj.Quality = 60; % 视频质量,0-100之间,数值越大视频字节也越大
aviobj.Fps = 20; %创建视频的帧率
aviobj.compression='None'; %可选的压缩方式有:  'Indeo3'(默认), 'Indeo5', 'Cinepak', 'MSVC', 'RLE' or 'None'.

for i=f_str:f_end
    pic=imread([r_path,int2str(i),'.jpg']); %从你指定的文件夹读取图片
    aviobj=addframe(aviobj,uint8(pic)); % 将当前图片添加至初始创建的avi视频
end
aviobj=close(aviobj); % 关闭创建视频

备注:如果第一次运行失败且已经执行了这句aviobj=avifile(video_name)时,再次运行将出错,因为这个名字已经存在,需要改另外一个名字。如果不压缩的话,视频会很大,几分钟的视频就有好几个G

并不是所有的压缩方式都能运行,我试了一下,只有后面4个能运行,前面两个都出错!这个系统和插件有关系,本人也不懂

其实个人觉得将图片转换成视频可以用一些软件去做,例如Windows Live(只能生成WMV格式),会声会影(很大,装起来不方便)等,用matlab不方便!各有千秋吧!

二 、VideoReader读取视频:

clc;
clear;
close all
temp=VideoReader('视频名称');% 得到的temp为一结构体,里面有视频的很多属性,可以读取很多格式的视频
numFrames = get(temp, 'NumberOfFrames');%获取视频的总帧数,同样可以获得视频的其它属性,例如宽和高等

for i=1:sub:numFrames
    image = read(temp, i);
    % 对图片进行操作
end

三 、movie函数播放视频:

clear;clc;
close all;

rPath='图片的路径';
numFrames=60;%图片的总帧数
vidHeight=576;vidWidth=768;%图片的高度(行)和宽度(列)

mov(1:numFrames)=struct('cdata', zeros(vidHeight, vidWidth,3, 'uint8'),...
            'colormap', [ ]); %构造mov结构体,用于作为movie的输入变量

for i=1:numFrames  %将所有图片先存入mov结构体中
    img=imread([rPath,'  (',int2str(i), ').jpg']);
    mov(i).cdata = img;
end
hf = figure;

movie(hf, mov, 1, 15);%各参数含义:hf: figure的句柄,mov: 上面构造的结构体;1: 视频播放次数;15: 视频的帧率

缺点:程序运行时帧数超过100帧就提示错误:Could not create movie frame!!!只能使用于帧数少的图片播放

 

1 0
原创粉丝点击