Matlab 如何截取视频中的每一帧图像
2015-10-29 19:54
429 查看
%这段代码可以选择一个或多个视频,根据视频名称和帧的序号对图片命名。设定的只能选择avi格式,至于其它格式的视频你可以改改代码的第一句试试%看。
%希望对你有用。
[filename,pathname,fileindex]=uigetfile('*.avi','选择视频文件','video.avi','Multiselect','on');
if ischar(filename) %只有选择了文件才进行以下计算
video=mmreader([pathname filename]);
%%General Settings:
%Duration 时间
%Name 视频名称
%Path 路径
%Tag =
%Type = mmreader
%UserData = []
%%Video Settings:
%BitsPerPixel=24
%FrameRate 视频采集速率
%Height 高度
%NumberOfFrames 总帧数
%VideoFormat 图像模式
%Width = 宽度
LEN=video.NumberOfFrames; %获得视频长度
dir=strcat(pathname,strrep(filename,'.avi',''),'\pic');
mkdir(dir);
fn=strrep(filename,'.avi','');
for k=1:LEN-1 %若read到len,常会报错如下??? MATLAB:read:readTimedOut,read到len-1就好了
frame=rgb2gray(read(video,k));
if k<10
imwrite(frame,strcat(dir,'\',fn,'-avi-000',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
elseif k>=10 && k<100
imwrite(frame,strcat(dir,'\',fn,'-avi-00',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
elseif k>=100 && k<1000
imwrite(frame,strcat(dir,'\',fn,'-avi-0',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
elseif k>=1000 && k<10000
imwrite(frame,strcat(dir,'\',fn,'-avi-',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
end
end
elseif iscell(filename)
navi=length(filename);
for n=1:navi
video=mmreader([pathname filename{n}]);
%%General Settings:
%Duration 时间
%Name 视频名称
%Path 路径
%Tag =
%Type = mmreader
%UserData = []
%%Video Settings:
%BitsPerPixel=24
%FrameRate 视频采集速率
%Height 高度
%NumberOfFrames 总帧数
%VideoFormat 图像模式
%Width = 宽度
LEN=video.NumberOfFrames; %获得视频长度
dir=strcat(pathname,strrep(filename{n},'.avi',''),'\pic');
mkdir(dir);
fn=strrep(filename{n},'.avi','');
for k=1:LEN-1 %若read到len,常会报错如下??? MATLAB:read:readTimedOut,独到len-1就好了
frame=rgb2gray(read(video,k));
if k<10
imwrite(frame,strcat(dir,'\',fn,'-avi-000',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
elseif k>=10 && k<100
imwrite(frame,strcat(dir,'\',fn,'-avi-00',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
elseif k>=100 && k<1000
imwrite(frame,strcat(dir,'\',fn,'-avi-0',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
elseif k>=1000 && k<10000
imwrite(frame,strcat(dir,'\',fn,'-avi-',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
end
end
disp(strcat(num2str(n),'/',num2str(navi),' : "',filename{n},'" Finished!',datestr(now,13)));
end
else
return
end
msgbox('所有帧提取完毕,已写入磁盘!','提示');
clear all
%希望对你有用。
[filename,pathname,fileindex]=uigetfile('*.avi','选择视频文件','video.avi','Multiselect','on');
if ischar(filename) %只有选择了文件才进行以下计算
video=mmreader([pathname filename]);
%%General Settings:
%Duration 时间
%Name 视频名称
%Path 路径
%Tag =
%Type = mmreader
%UserData = []
%%Video Settings:
%BitsPerPixel=24
%FrameRate 视频采集速率
%Height 高度
%NumberOfFrames 总帧数
%VideoFormat 图像模式
%Width = 宽度
LEN=video.NumberOfFrames; %获得视频长度
dir=strcat(pathname,strrep(filename,'.avi',''),'\pic');
mkdir(dir);
fn=strrep(filename,'.avi','');
for k=1:LEN-1 %若read到len,常会报错如下??? MATLAB:read:readTimedOut,read到len-1就好了
frame=rgb2gray(read(video,k));
if k<10
imwrite(frame,strcat(dir,'\',fn,'-avi-000',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
elseif k>=10 && k<100
imwrite(frame,strcat(dir,'\',fn,'-avi-00',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
elseif k>=100 && k<1000
imwrite(frame,strcat(dir,'\',fn,'-avi-0',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
elseif k>=1000 && k<10000
imwrite(frame,strcat(dir,'\',fn,'-avi-',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
end
end
elseif iscell(filename)
navi=length(filename);
for n=1:navi
video=mmreader([pathname filename{n}]);
%%General Settings:
%Duration 时间
%Name 视频名称
%Path 路径
%Tag =
%Type = mmreader
%UserData = []
%%Video Settings:
%BitsPerPixel=24
%FrameRate 视频采集速率
%Height 高度
%NumberOfFrames 总帧数
%VideoFormat 图像模式
%Width = 宽度
LEN=video.NumberOfFrames; %获得视频长度
dir=strcat(pathname,strrep(filename{n},'.avi',''),'\pic');
mkdir(dir);
fn=strrep(filename{n},'.avi','');
for k=1:LEN-1 %若read到len,常会报错如下??? MATLAB:read:readTimedOut,独到len-1就好了
frame=rgb2gray(read(video,k));
if k<10
imwrite(frame,strcat(dir,'\',fn,'-avi-000',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
elseif k>=10 && k<100
imwrite(frame,strcat(dir,'\',fn,'-avi-00',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
elseif k>=100 && k<1000
imwrite(frame,strcat(dir,'\',fn,'-avi-0',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
elseif k>=1000 && k<10000
imwrite(frame,strcat(dir,'\',fn,'-avi-',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
end
end
disp(strcat(num2str(n),'/',num2str(navi),' : "',filename{n},'" Finished!',datestr(now,13)));
end
else
return
end
msgbox('所有帧提取完毕,已写入磁盘!','提示');
clear all
相关文章推荐
- win8下安装matlab7.0
- 【Matlab开发】matlab删除数组中符合条件的元素与散点图绘制
- MATLAB不运行也不报错
- matlab矩阵的表示和简单操作
- MATLAB GPU编程基础
- matlab中的cat函数
- matlab将向量或矩阵复制升维
- Python vs Matlab—— find 与 np.where
- 如何用matlab画正态分布曲线
- 归一化与标准化处理
- matlab linprog函数的使用
- matlab文件读写
- 利用Matlab拟合时序植被生长季曲线,并求解物候参数
- 在MATLAB下调试Caffe
- Matlab实现Hough直线检测
- 高斯混合模型(matlab代码+注释)
- 使用MATLAB遍历指定的子文件夹及其下文件
- 精确径向基(matlab工具箱)
- matlab程序移植到C(输出比较)
- Matlab 调用 C# dll