【问题标题】:Load text file on Matlab with a GUI使用 GUI 在 Matlab 上加载文本文件
【发布时间】:2013-08-01 23:41:30
【问题描述】:

我有一个关于如何编写代码以在 Matlab 中创建 GUI 的问题。我用一个简单的按钮创建了图形界面。我想要那个,按下那个按钮,加载一个文本文件,然后循环,加载一个图像并创建不同的波段(这个过程是因为它是一个具有不同波段的多光谱图像)。如果我在 .m 文件上执行,此代码运行良好。这是代码:

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)

Dates=load ('C:\Users\Desktop\dates.txt');
NombImages=load ('images.txt');
Nimages= numel(Dates);
fileimg=NombImages(1);
fileistr=int2str(fileimg);
image1 = imread(fileistr);
size=size(imagen1);   nrows= size(1);
ncolumns= size(2);
nbands= size(3);

Images = zeros(nrows, ncolumns, nbands, Mimages, 'uint16'); 
imagess = zeros(nrows, ncolumns, nbands);

for image= 1: Nimages
    fileimg=NombImagen(image);
    fileistr=int2str(fileimg);
    imagess = imread(fileistr);
    Images(:,:,:,image)=imagess;   
end

DN= double(Images);

Band1 = Images(:,:,1);
Band2 = Images(:,:,2);
Band3 = Images(:,:,3);

end

% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

也许看起来有点复杂,但这是因为图像的格式(16 位等)。我不想可视化乐队,只用该代码加载它。

任何帮助将不胜感激。提前谢谢,

【问题讨论】:

  • 那么,有什么问题...?您收到任何错误消息吗?
  • 不,问题是当我按下按钮时,我收到以下错误:“??? Error: File: load.m Line: 113 Column: 1 The function "pushbutton1_Callback" was closed有一个'end',但至少有一个其他函数定义没有。”为避免在使用嵌套函数时产生混淆,在同一个文件中同时使用这两种约定是非法的。”

标签: matlab user-interface


【解决方案1】:

我们开始:

您收到一条错误消息,表明在您的函数(pushbutton-callback-fcn)的末尾有一个“结束”。

在 Matlab 中,可以在不以 end 结束的情况下结束函数 :)

例如,当使用 GUIDE 时,这是默认设置。 GUIDE 创建函数时不以“end”结尾。

所以问题是:如果你在某处放置一个“结束”语句来结束一个函数,Matlab 期望在每个函数之后都有一个结束!!

在您的特殊情况下:

删除代码末尾的“end”:

...
Band1 = Images(:,:,1);
Band2 = Images(:,:,2);
Band3 = Images(:,:,3);

end%<-this one :)

当然,另一种选择是,在每个函数之后结束......

编辑

要在 GUI 中存储数据,您可以(或应该)使用句柄结构。此处详细说明如何使用:

TMW: guidata

一个简短的版本:

在句柄结构中存储数据,如下所示:

handles.myVar = ...

别忘了用这个命令更新结构:

guidata(hObject,handles)

对你来说应该是这样的:

handles.Band1=Band1; %or directly: ...=Images(:,:,1);
...
guidata(hObject,handles)

稍后您可以在另一个函数中检索数据(当然知道句柄结构!),就像这样:

handles.Band1

【讨论】:

  • 感谢卢修斯!我删除了“结束”,原则上不会产生任何错误消息,但不会产生任何结果。也许,我必须写一个命令输出吗?我已经运行了“dbstop if error”命令,但它也没有生成任何消息。
  • 哇!谢谢卢修斯! ;) 昨天我尝试在“set(hObject,eventdata)”末尾添加该命令,但我一直收到一个错误,但现在它可以工作了。谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-09-18
  • 1970-01-01
  • 2023-02-07
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多