目前我正在做一个项目,我需要一次读取 9 张图像并使用 Matlab GUI 在 9 个轴上显示它们。我尝试了一些代码,但它不起作用。
[file,folder,FilterIndex] = uigetfile('*.*','MultiSelect','on');
handles.img=cell(1,length(file));
for ifile = 1:length(file)
filename=fullfile(folder,file(ifile).name);
image=imread(filename);
axes(handles.axes{ifile});
imshow(image);
handles.img{ifile}=image
end
这是错误消息:
??? Improper index matrix reference.
Error in ==> guikedelaizulfa>open_Callback at 1098
filename=fullfile(folder,file(ifile).name);
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> guikedelaizulfa at 42
gui_mainfcn(gui_State, varargin{:});
Error in ==>
@(hObject,eventdata)guikedelaizulfa('open_Callback',hObject,eventdata,guidata(hObject))
??? Error while evaluating uicontrol Callback
谢谢你的帮助
问题是您使用uigetfile
的输出,就好像它与dir
的输出相同一样。uigetfile
的输出很简单
[files, folder, filterIndex] = uigetfile('*.*','MultiSelect','on');
如果您查看文件的值,您会发现它是一个文件名的单元格数组,而不是像您正在处理它那样的结构。
disp(files)
如果我们将其处理到您当前的代码中:
[files, folder, filterIndex] = uigetfile('*.*','MultiSelect','on');
handles.img = cell(1, numel(files));
for ifile = 1:numel(files)
filename = fullfile(folder, files{ifile});
img = imread(filename);
imshow(img, 'Parent', handles.axes{ifile});
handles.img{ifile} = img;
end
如果您没有轴句柄,而只有轴标签,您可以在循环中执行以下操作
ax = findall(gcf, 'type', 'axes', 'tag', sprintf('axes%d', ifile));
imshow(img, 'Parent', ax);