您好我正在设计一个gui,用户将按下按钮选择图像,然后在我创建的轴上显示它们。
我知道如何在特定轴上显示一个图像但是如何选择并显示多个图像呢?
谢谢
答案 0 :(得分:3)
如果文件位于您可以使用的同一文件夹中:
[filename, pathname, filterindex] = uigetfile( {file_types_to_display}, 'Window_Title', 'MultiSelect', 'on');
这将生成一个具有所选文件名和路径的单元格。然后,您可以使用strcat或类似方法生成文件的完整路径,然后使用load将它们添加到工作区。
uigetfile不能处理多个文件夹中的文件。
另一种选择是进行某种递归搜索,根据文件扩展名或名称列出文件夹中的所有文件,然后继续加载你想要的文件。这样,您将拥有文件夹和子文件夹中的所有文件,以便您可以在多个文件夹中使用图像。在MATLAB Exchange中搜索递归文件搜索代码。
编辑1 : 要使用uigetfile显示所选图像,您需要输入代码以选择并显示由指南生成的按钮回调下的图像。
function pushbutton1_Callback(hObject, eventdata, handles)
%multi-file selection
[filename, pathname, ~] = uigetfile({ '*.jpg'}, 'Pick 3 files',...
'MultiSelect', 'on');
%generation of strings containing the full path to the selected images.
img1 = strcat(pathname, filename{1});
img2 = strcat(pathname, filename{2});
img3 = strcat(pathname, filename{3});
%assign an axes handle to preced imshow and use imshow to display the images
% in individual axes.
axes(handles.axes1);
imshow(img1);
axes(handles.axes2);
imshow(img2);
axes(handles.axes3);
imshow(img3);
上面的代码允许您从文件夹中选择任意数量的图像,但它只显示生成的单元格中的前3个图像'文件名'。为了能够选择任意数量的图像,然后滚动它们,你需要再向前和向后两个按钮回调..
function pushbutton1_Callback(hObject, eventdata, handles)
%assign global variable so the other pushbuttons can access the values
global k num_imgs pathname filename
%uigetfile in multiselect mode to select multiple files
[filename, pathname, ~] = uigetfile({'*.jpg'},...
'Pick 3 files',...
'MultiSelect', 'on');
%initialisation for which image to display after selection is made.
k = 1;
%dicern the number of images that where selected
num_imgs = length(filename);
%create string of full path to first image in selection and display
%the image
img1 = strcat(pathname, filename{k});
axes(handles.axes1);
imshow(img1);
function pushbutton2_Callback(hObject, eventdata, handles)
global k num_imgs pathname filename
%using global values of k create if statement to stop scrolling beyond the
%number of available images.
if k > num_imgs
%if the index value of the image to be displayed is greater than the
%number available default to the last image in the list
k = num_imgs;
else
%iterate upwards with each click of pushbutton2 to display the next
%image in the series.
k = k + 1;
img1 = strcat(pathname, filename{k});
axes(handles.axes1);
imshow(img1);
end
function pushbutton3_Callback(hObject, eventdata, handles)
global k num_imgs pathname filename
if k < 1
%if the index value of the image to be displayed is less than 1
%default to the first image in the list
k = 1;
else
k = k - 1;
img1 = strcat(pathname, filename{k});
axes(handles.axes1);
imshow(img1);
end
EDIT2 :@ user3755632我不确定我明白。 filename是一个字符串,只要字符串包含文件名和路径(如果它位于工作目录之外),您就可以将字符串提供给imshow以显示图像。你没有使用uigetfile来选择图像吗? (由于缺乏声誉,不能评论问题)