MATLAB 显示多个图像
MATLAB Display Multiple Images
您好,我正在设计一个图形用户界面,用户可以在其中按下一个按钮来 select 图像,然后将它们显示在我创建的轴上。
我知道如何在特定轴上显示一张图像,但我怎么能 select 并显示多张图像?
谢谢
如果文件位于同一文件夹中,您可以使用:
[filename, pathname, filterindex] = uigetfile( {file_types_to_display}, 'Window_Title', 'MultiSelect', 'on');
这将生成一个包含 selected 文件名和路径的单元格。然后,您可以使用 strcat 或类似工具生成文件的完整路径,然后使用 load 将它们添加到工作区。
uigetfile 不适用于多个文件夹中的文件。
另一种选择是进行某种递归搜索,以根据文件扩展名或名称列出文件夹中的所有文件,然后继续加载所需的文件。这样您将拥有文件夹和子文件夹中的所有文件,因此您可以使用多个文件夹中的图像。在 MATLAB Exchange 中搜索递归文件搜索代码。
编辑 1:
要使用 uigetfile 显示 selected 图像,您需要将代码放入 select 并在 guide 生成的按钮回调下方显示图像。
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);
上面的代码允许您 select 文件夹中的任意数量的图像,但是它只显示生成的单元格中的前 3 张图像 'filename'。为了能够 select 任意数量的图像,然后滚动浏览它们,您还需要两个用于前进和后退的按钮回调..
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 来 select 图像吗? (由于缺乏声誉,无法对问题发表评论)
您好,我正在设计一个图形用户界面,用户可以在其中按下一个按钮来 select 图像,然后将它们显示在我创建的轴上。
我知道如何在特定轴上显示一张图像,但我怎么能 select 并显示多张图像?
谢谢
如果文件位于同一文件夹中,您可以使用:
[filename, pathname, filterindex] = uigetfile( {file_types_to_display}, 'Window_Title', 'MultiSelect', 'on');
这将生成一个包含 selected 文件名和路径的单元格。然后,您可以使用 strcat 或类似工具生成文件的完整路径,然后使用 load 将它们添加到工作区。
uigetfile 不适用于多个文件夹中的文件。
另一种选择是进行某种递归搜索,以根据文件扩展名或名称列出文件夹中的所有文件,然后继续加载所需的文件。这样您将拥有文件夹和子文件夹中的所有文件,因此您可以使用多个文件夹中的图像。在 MATLAB Exchange 中搜索递归文件搜索代码。
编辑 1: 要使用 uigetfile 显示 selected 图像,您需要将代码放入 select 并在 guide 生成的按钮回调下方显示图像。
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);
上面的代码允许您 select 文件夹中的任意数量的图像,但是它只显示生成的单元格中的前 3 张图像 'filename'。为了能够 select 任意数量的图像,然后滚动浏览它们,您还需要两个用于前进和后退的按钮回调..
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 来 select 图像吗? (由于缺乏声誉,无法对问题发表评论)