这一篇主要介绍一些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}); %先保存所有视频或图像路径endVideoObject = 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
%      TESTGUI, by itself, creates a new TESTGUI or raises the existing
%      singleton*.
%
%      H = TESTGUI returns the handle to a new TESTGUI or the handle to
%      the existing singleton*.
%
%      TESTGUI('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in TESTGUI.M with the given input arguments.
%
%      TESTGUI('Property','Value',...) creates a new TESTGUI or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before TestGUI_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to TestGUI_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help TestGUI% Last Modified by GUIDE v2.5 06-Oct-2015 11:48:44% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @TestGUI_OpeningFcn, ...'gui_OutputFcn',  @TestGUI_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before TestGUI is made visible.
function TestGUI_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to TestGUI (see VARARGIN)
% 定义全局变量
global isVideo;
isVideo = 0;
global isImage;
isImage = 0;
global Count;
Count = 0;
% Choose default command line output for TestGUI
handles.output = hObject;% Update handles structure
guidata(hObject, handles);% UIWAIT makes TestGUI wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = TestGUI_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;% --------------------------------------------------------------------
function ImageIO_Callback(hObject, eventdata, handles)
% hObject    handle to ImageIO (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% --------------------------------------------------------------------
function VideoIO_Callback(hObject, eventdata, handles)
% hObject    handle to VideoIO (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% --------------------------------------------------------------------
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}); %先保存所有视频或图像路径endVideoObject = 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% --------------------------------------------------------------------
function SaveVideoIO_Callback(hObject, eventdata, handles)
% hObject    handle to SaveVideoIO (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%保存视频
[SaveVideoFileName,SaveVideoPathName,SaveVideoFilterIndex] = uiputfile({'*.avi;*.mp4','VideoFile(*.avi,*.mp4)';...'*.avi','AVIVideoFile(*.avi)';'*.*','AllFile(*.*)'},'ReadVideo',...'C:\Users\hsw\Desktop'); %设置默认路径
if isequal(SaveVideoFileName,0) || isequal(SaveVideoPathName,0) || isequal(SaveVideoFilterIndex,0)disp('User seleceted Cancel');
else%这里保存所有读入的视频的处理结果end% --------------------------------------------------------------------
function ReadImageIO_Callback(hObject, eventdata, handles)
% hObject    handle to ReadImageIO (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%读入图像,前三个是第一次申明,第四个是引用
global InputImage;
global ResultImage;
global ImageFullPath;
global isImage;
[ReadImageFileName,ReadImagePathName,ReadImageFilterIndex] = uigetfile({'*.jpg;*.png;*.tif','ImageFile(*.jpg;*.png;*.tif)';...'*.jpg','JPEGImageFile(*.jpg)';'*.*','AllFile(*.*)'},'ReadImage',...'MultiSelect','on',...       %是否能够多选,'off'不支持多选, 'on'支持多选'C:\Users\hsw\Desktop'); %设置默认路径
if isequal(ReadImageFileName,0)|| isequal(ReadImagePathName,0) || isequal(ReadImageFilterIndex,0)msgbox('导入图像失败,点击 确定 关闭对话框,再重新导入');
else% 支持多选时,注意需要分别处理isImage = 1;if iscell(ReadImageFileName)%读入多个图像时,名称为cell数组,多个图像必须在同一个目录InputImage = cell(length(ReadImageFileName),1);ImageFullPath = InputImage;for IterImage = 1:length(ReadImageFileName)ImageFullPath{IterImage} = fullfile(ReadImagePathName,ReadImageFileName{IterImage});endFirstImageFullPath = ImageFullPath{1};else%只读入一个视频时FirstImageFullPath = fullfile(ReadImagePathName,ReadImageFileName);ImageFullPath = FirstImageFullPath; end%显示第一张图片axes(handles.OriginalAxes);imshow(imread(FirstImageFullPath));axes(handles.ResultAxes);imshow(255*ones(size(imread(FirstImageFullPath))));ResultImage = InputImage;msgbox('成功导入图像,点击 确定 关掉对话框');
end% --------------------------------------------------------------------
function SaveImageIO_Callback(hObject, eventdata, handles)
% hObject    handle to SaveImageIO (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%保存图像:保存当前结果
[SaveImageFileName,SaveImagePathName,SaveImageFilterIndex] = uiputfile({'*.jpg;*.png;*.tif','ImageFile(*.jpg;*.png;*.tif)';...'*.jpg','JPEGImageFile(*.jpg)';'*.*','AllFile(*.*)'},'SaveImage','C:\Users\heshiwen\Desktop');if isequal(SaveImageFileName,0) || isequal(SaveImagePathName,0) || isequal(SaveImageFilterIndex,0)disp('User selected Cancel');
else%保存处理的结果end% --- Executes on button press in StartPushButton.
function StartPushButton_Callback(hObject, eventdata, handles)
% hObject    handle to StartPushButton (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;
global InputImage;
global ResultImage;
global ImageFullPath;
global isImage;
global Count;
% handles 不清楚有哪些按钮可以输出handles查看
ChooseFunctions1 = get(handles.radiobutton1,'Value'); %执行radiobutton对应功能
ChooseFunctions2 = get(handles.radiobutton2,'Value'); %执行radiobutton对应功能
if isImage %处理图像if ChooseFunctions1 %进行图像翻转if iscell(ImageFullPath) && Count < length(ImageFullPath) %处理多幅图像InputImage = imread(ImageFullPath{Count + 1});ResultImage{Count + 1} = 255*ones(size(InputImage)) - double(InputImage);axes(handles.OriginalAxes);imshow(InputImage);axes(handles.ResultAxes);imshow(ResultImage{Count + 1}/255,[]);Count = Count + 1;if Count == length(ImageFullPath)msgbox('图像处理完!'); Count = 0; end elseif ~iscell(ImageFullPath) && Count < 1InputImage = imread(ImageFullPath);ResultImage = 255*ones(size(InputImage)) - double(InputImage);axes(handles.OriginalAxes);imshow(InputImage);axes(handles.ResultAxes);imshow(ResultImage/255,[]);Count = Count + 1; if Count == 1 msgbox('图像处理完!'); Count = 0; end end        elseif ChooseFunctions2 %进行直方图均衡化msgbox('没有实现!'); elseerrordlg('程序出错了!');end
elseif isVideoif ChooseFunctions1if iscell(VideoFullPath) && Count < length(VideoFullPath)VideoObject = VideoReader(VideoFullPath{Count + 1}); for IterVideo = 1:VideoObject.NumberOfFramesInputFrame = read(VideoObject,IterVideo); ResultFrame = 255*ones(size(InputFrame)) - double(InputFrame); axes(handles.OriginalAxes);imshow(InputFrame); axes(handles.ResultAxes); imshow(ResultFrame/255,[]); end Count = Count + 1; %改如何保存呢?elseif ~iscell(ImageFullPath) && Count < 1Count = Count + 1; end elseif ChooseFunction2msgbox('没有实现!'); elseerrordlg('程序出错了!');end
elseerrordlg('需要先导入图像/视频');
end% --- Executes on button press in ExitPushButton.
function ExitPushButton_Callback(hObject, eventdata, handles)
% hObject    handle to ExitPushButton (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%退出导航
close(gcf);
% msgbox('Exit !!');

注意:保存部分没有写,类比读取图像的方法添加就行了

Matlab GUI设计——文件读取和保存uigetfile,uiputfile相关推荐

  1. MATLAB GUI设计——绘图

    MATLAB GUI设计--绘图 讨论两个问题,将MATLAB绘图保存为适合于论文使用的格式,绘图的一些技巧.也许我们都这样的做过,MATLAB所绘制的图形要保存为图片,一般是使用截图的方式,或者使用 ...

  2. Spark的RDD 文件读取与保存

    RDD 文件读取与保存 Spark 的数据读取及数据保存可以从两个维度来作区分:文件格式以及文件系统.其中: (1)文件格式分为:text 文件.csv 文件.sequence 文件以及Object ...

  3. matlab gui .fig,精通MATLAB GUI设计 matlab gui 图形处理 图形用户界面(Graphical User Interface - 下载 - 搜珍网...

    压缩包 : xunzai.com_陈垚光<精通MATLAB GUI设计>.rar 列表 陈垚光<精通MATLAB GUI设计>/第10章/exm10.m 陈垚光<精通MA ...

  4. matlab写函数进行坐标正反算,坐标正反算的MATLAB GUI设计与应用

    第 30 卷 第 4 期 2018 年 10 月 黄河水利职业技术学院学报 JournalofYellowRiverConservancyTechnicalInstitute Vol.30 No.4 ...

  5. MATLAB GUI设计 多个选项卡/子页面

    MATLAB GUI设计 多个选项卡/子页面 需要使用GUI Layout Toolbox,文末附下载链接 % 创建一个figure f = figure('MenuBar','none','Tool ...

  6. 2.Open3D教程——文件读取和保存

    文件读取和保存 本教程演示了Open3D如何读写基本数据结构. 1. 点云 下面的代码读取和写入点云. print("Testing IO for point cloud ..." ...

  7. python 常用文件读取和保存方式汇总

    python 常用文件读取和保存方式汇总 txt文件 open和close函数 文件对象的方法 读写示例理解rwa中的指针 w a r txt文件 open和close函数 fileObject = ...

  8. java文件读取与保存

    文件读取与保存 Long startTime=System.currentTimeMillis();String jsonStr = "";try {File jsonFile = ...

  9. matlab app使用对话框读取和保存文件

    主要使用的函数是uigetfile和uiputfile [Fnameh,Pnameh]=uigetfile('*.mat'); 上述命令将打开读取文件的对话框选择读取mat类型文件,将文件名赋给Fna ...

  10. MATLAB GUI设计 简单图像处理 灰度 | 缩放 | 存储 | GUI

    零的启程 我从零开始的Matlab之旅 本GUI实现 加载图片.灰度处理图片.0.5倍缩放图片.保存处理后的图片功能 版本为R2018b 中文版本 目录 绘制GUI 功能实现 加载图片 灰度处理 0. ...

最新文章

  1. Nervos Report (2018年12月)
  2. c++ 遍历多级目录
  3. 《水泥公司信息管理系统》Access学习心得
  4. MobileGestalt.h 头文件
  5. 面试题:sql数据查询
  6. Java中的List你真的会用吗
  7. [html] HTML5中的article和section有什么区别?
  8. android判断是否json格式,android – 检查JSON中是否存在subObject
  9. 微型计算机主机箱内所有部件均由,《计算机应用基础》模拟试题
  10. 基于GPT2的中文闲聊机器人/GPT2 for Chinese chitchat
  11. Scikit-learn:分类classification
  12. matlab高数同步教程,高等数学及其MATLAB实现 上册
  13. 最新推券客CMS淘宝客优惠券程序源码V3.6.1版
  14. win11怎么隐藏任务栏图标?
  15. Java 导入导出Excel
  16. 误删注册表导致键盘不可用,NumLock一直亮着
  17. 2018VMware虚拟机安装ghost win7系统正确方法
  18. 实现手机端的触屏滑动效果
  19. AUTOSAR MCAL解析: ADC
  20. 醉后不知天在水,满船清梦压星河。—第三十六天

热门文章

  1. java获取字典表数据,利用注解完成字典表数据对应
  2. 【服务器系统设计】socket的阻塞模式和非阻塞模式总结
  3. 微信小程序 图片上传预览删除
  4. 做中学之五笔输入法实践教程
  5. 深圳大学计算机考研教材,广东-深圳大学计算机考研院校初试科目及参考书汇总...
  6. 太极 免ROOT使用Xposed模块
  7. 解决CAD输出PDF字体周围有边框
  8. 女生考华为IE会容易一点吗?女生做网工一般是什么岗位呢?找工作容易吗?需要出差吗?以后怎么发展呢?
  9. 线性分类器定义和局限性
  10. java字节码查看器_jclasslib 下载