2015-08-15 40 views
0

我有经由MATLAB GUI执行对图像集的以下步骤:如何通过循环访问uigetfile元素?

  1. 阅读来自目录的多个图像
  2. 处理它们(应用imadjust每个图像上)
  3. 存储它们在用户指定或相同的目录,同时重命名它们

有人可以为我提供相同的代码吗?我在此之后卡住:

[filename, pathname,~] = uigetfile(... 
{'*.jpg;*.jpeg;',... 
'JPEG Files (*.jpg,*.jpeg)'; 
    '*.png', 'PNG files (*.png)'; ... 
    '*.bmp','BMP File (*.bmp)'; ... 
    '*.tiff;*.tif','TIFF Files (*.tiff,*.tif)'; ... 
    '*.*', 'All Files (*.*)'}, ... 
    'Pick a file',... 
    'Multiselect','on'); 
set(handles.inputpathtext,'String',pathname); 

回答

0
[file_name_list, pathname] = uigetfile({'your filter spec','Multiselect','on'); 

,上面一行是给你包含你所选择的文件的名称单元阵列。以下代码循环访问单元格数组,读取图像,执行一些调整,并将其前缀'processed_'添加到pathname指定的同一文件夹中的文件名中。

for ii = 1:length(file_name_list) 
    if iscell(file_name_list) 
     filename = file_name_list{ii}; 
    else 
     filename = file_name_list; 
    end 
    img = imread(fullfile(pathname, filename)); 
    img = imadjust(img); % Do something to the image 
    imwrite(img, fullfile(pathname, ['processed_', filename]) 
end 
+0

该代码完美适用于多输入。当我添加单个文件时,它会给出错误:单元格内容引用来自非单元格数组对象。 – slackbot

+0

这是因为当你只有一个输入时,'file_name_list'将是一个字符串,但不是字符串的单元数组。如果您还想考虑单个输入,请检查返回的file_name_list是否为单元数组,而不是将其视为字符串。查看更新的代码。 – user3667217

+0

Works Awesome。谢谢。你能帮我创建新的目录吗?我想保存在路径名\转换。我尝试使用new_folder = strcat(路径名,'转换\');和imwrite(img,fullfile(new_folder,['processed _',file_name_list])); – slackbot