Загрузка нескольких изображений в Matlab GUI - PullRequest
0 голосов
/ 06 ноября 2018

Я хочу загрузить несколько изображений в Matlab GUI. Алгоритм ниже:

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% 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)
[filename path] = uigetfile('*.jpg','*.png','Chose files to 
load','MultiSelect','on');

if isequal(filename,0) || isequal(path,0) 
return
end


if iscell(filename)
img = cell(size(filename));
for ii = 1:numel(filename)
  img{ii} = imread(fullfile(path,filename{ii}));
end
else
img{1} = imread(fullfile(path,filename));
end


filename = strcat(path,filename);
fullpathname = strcat(path, filename);
set(handles.edit1,'String', fullpathname);
fileID = fopen(strcat(path, filename), 'r'); 

Работает в случае загрузки одного изображения, но в случае загрузки нескольких изображений выдает mi последующую ошибку:

Error using imread>parse_inputs (line 457)
The file name or URL argument must be a string.

Error in imread (line 316)
[filename, fmt_s, extraArgs] = parse_inputs(varargin{:});

Error in untitled>pushbutton1_Callback (line 112)
im = rgb2gray(imread(filename));

Error in gui_mainfcn (line 95)
    feval(varargin{:});

Error in untitled (line 42)
gui_mainfcn(gui_State, varargin{:});

Error in 
@(hObject,eventdata)
untitled('pushbutton1_Callback',hObject,eventdata,guidata(hObject))

Не могли бы вы дать мне подсказку, чтобы я мог сделать это функциональным?

1 Ответ

0 голосов
/ 06 ноября 2018

uigetfile возвращается filename:

вектор символов или массив ячеек векторов символов.

(из документации ). Первое происходит при выборе одного файла, второе - при выборе нескольких файлов.

Таким образом, если вы хотите быть ale, чтобы выбрать несколько файлов, ваш код должен обработать этот случай, проверив, есть ли iscell(filename), и, если да, зацикливаясь на каждом из его элементов.

Также, пожалуйста, используйте fullfile для объединения частей пути или имени файла, это предотвратит проблемы переносимости в будущем.


Вы можете написать код так:

[filename,path] = uigetfile({'*.jpg';'*.png'},'Chose files to load','MultiSelect','on');

if isequal(filename,0)
   return
end

if iscell(filename)
   img = cell(size(filename));
   for ii = 1:numel(filename)
      img{ii} = imread(fullfile(path,filename{ii}));
   end
else
   img{1} = imread(fullfile(path,filename));
end

Теперь img - это массив ячеек, содержащий все выбранные изображения.

...