2015-08-15 75 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