【问题标题】:Loading multiple images in Matlab GUI在 Matlab GUI 中加载多个图像
【发布时间】:2018-11-06 12:54:22
【问题描述】:

我想在 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))

能否请您给我一个提示,以便我让它发挥作用?

【问题讨论】:

    标签: matlab loading matlab-guide


    【解决方案1】:

    uigetfile 返回filename

    一个字符向量或字符向量元胞数组。

    (来自documentation)。前者在选择一个文件时发生,后者在选择多个文件时发生。

    因此,如果您想选择多个文件,您的代码需要通过检查是否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 是一个包含所有选定图像的元胞数组。

    【讨论】:

    • 我希望能够选择一个图像或多个图像。我应该在算法中改变什么?
    • 请参阅原始问题的编辑。我还需要能够看到图像或图像的目录。它给了我编辑问题中的错误。很抱歉我没有早点提到它。
    • @Franta:收到答案后请不要更改问题,因为它会使答案无效。如果答案没有完全解决问题,您可以添加它,或者如果它是一个不同的问题(即使它是相关的),您可以提出一个新问题。我已回滚您的编辑。
    • @Franta:无论如何,在我看来,您并没有完全理解答案。您现在在第二部分中遇到错误,您再次连接 pathfilename。这是同一个问题。如果filename 是一个元胞数组,则此连接会产生不同的结果。请使用调试器并逐行执行您的代码,检查变量的值并查看将字符串与字符串元胞数组连接后fullpathname 的值。
    • @Brice: size 返回一个大小的向量,而不是一个标量。 img 的大小将与 filename 相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 2015-08-12
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多