[filename,pathname,fileindex]=uigetfile('*.avi','选择视频文件','选择视频文件.avi','Multiselect','on')
% [FileName,PathName,FilterIndex] = uigetfile(FilterSpec,DialogTitle,DefaultName)
% FileName:返回的文件名
% PathName:返回的文件的路径名
% FilterIndex:选择的文件类型
% FilterSpec:文件类型设置
% DialogTitle:打开对话框的标题
% DefaultName:默认指向的文件名
if ischar(filename) %ischar(tline)是判断tline变量是否是字符串类型的变量
video=VideoReader([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)) %将图像二值化,因为处理中进行二值化,故不在此使用
frame=read(video,k)
imwrite(frame,strcat(fn,'',int2str(k),'.jpg'),'jpg')%把每帧图像存入硬盘,直接存入当前目录
end
elseif iscell(filename)
navi=length(filename)
for n=1:navi
video=VideoReader([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,'000',int2str(k),'.jpg'),'jpg')%把每帧图像存入硬盘
elseif k>=10 &&k<100
imwrite(frame,strcat(dir,'\',fn,'00',int2str(k),'.jpg'),'jpg')%把每帧图像存入硬盘
elseif k>=100 &&k<1000
imwrite(frame,strcat(dir,'\',fn,'0',int2str(k),'.jpg'),'jpg')%把每帧图像存入硬盘
elseif k>=1000 &&k<10000
imwrite(frame,strcat(dir,'\',fn,'',int2str(k),'.jpg'),'jpg')%把每帧图像存入硬盘
end
end
disp(strcat(num2str(n),'/',num2str(navi),' : "',filename{n},'" Finished!',datestr(now,13)))
end
else
return
end
msgbox('所有帧提取完毕,已写入磁盘!','提示')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)