这一篇主要介绍一些Matlab GUI制作时常用到的文件读取和保存的函数:uigetfile,uiputfile。具体的语法就不再重复,主要通过一些自己编写的GUI来进行介绍,也许这样更有帮助:
1. uigetfile:该函数返回值包含读取的文件的名称cell数组(FileName),文件的路径数组(FilePath),判断读取是否成功的标志FileIndex(不等于0时表示成功)。我们分析下面的matlab代码来进行具体讲解:我们通过在Callback函数中添加uigetfile函数来实现在界面中读入视频,注意到在代码中uigetfile的返回值正好为之前介绍过的三个值,不再介绍,同时{}中表示读取文件的格式选择,‘ReadVideo'则为读取数据的对话框的名称,’MultiSelect'取值为‘on'表示一次可以打开多个视频,当打开的是多个视频时,FileName是一个cell数组,如果取值为’off'时,则只能打开一个视频;还有就是可以设置默认路径,即弹出的对话框中最先能够看到的文件的路径。
注意:uigetfile只是获得了文件的路径和文件名称,并没有其他的任何操作,真正读取数据,需要相应的读取函数,例如图片可以用imread,视频可以用VideoReader对象读取。
function ReadVideoIO_Callback(hObject, eventdata, handles)
% hObject handle to ReadVideoIO (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%读入视频,前三个是第一次申明,第四个是引用
global InputVideo;
global ResultVideo;
global VideoFullPath;
global isVideo;
[ReadVideoFileName,ReadVideoPathName,ReadVideoFilterIndex] = uigetfile({'*.avi;*.mp4','VideoFile(*.avi,*.mp4)';'*.avi','AVIVideoFile(*.avi)';'*.*','AllFile(*.*)'},'ReadVideo',...
'MultiSelect','on',... %是否能够多选,'off'不支持多选, 'on'支持多选
'C:\Users\hsw\Desktop'); %设置默认路径
if isequal(ReadVideoFileName,0) || isequal(ReadVideoPathName,0) || isequal(ReadVideoFilterIndex,0)
msgbox('导入视频失败,点击 确定 关闭对话框,再重新导入');
else
%支持多选时需要处理
isVideo = 1;
if iscell(ReadVideoFileName)
%读入多个视频时
InputVideo = cell(length(ReadVideoFileName),1);
VideoFullPath = InputVideo;
for IterVideo = 1:length(ReadVideoFileName)
VideoFullPath{IterVideo} = fullfile(ReadVideoPathName,ReadVideoFileName{IterVideo}); %先保存所有视频或图像路径
end
VideoObject = VideoReader(VideoFullPath{1});
else
%只读入一个视频时
VideoFullPath = fullfile(ReadVideoPathName,ReadVideoFileName);
VideoObject = VideoReader(VideoFullPath);
end
% 显示第一个视频的第一帧,直到按下Start按钮时,开始显示别的
frame = read(VideoObject,1);
axes(handles.OriginalAxes);
imshow(frame);
axes(handles.ResultAxes);
imshow(255*ones(size(frame)));
ResultVideo = InputVideo;
msgbox('成功导入视频,点击 确定 关掉对话框');
end
2. uiputfile:该函数的返回值同uigetfile函数相同,但是,没有了‘MultiSelect’属性,即一次只能一次保存一个文件,当然,这里是不会真正保存文件的,而是返回路径+文件名称,从而,需要添加真正保存文件的代码,例如imwrite保存图像
3. 一个简单的界面:
function varargout = TestGUI(varargin)
% TESTGUI MATLAB code for TestGUI.fig
%