2014-03-05 66 views
0

我有大約1000張圖像需要加載爲面部識別程序的訓練數據。遍歷文件,加載圖像 - Matlab

有100人,每人有10張獨特的照片。

保存的文件夾中,如:

myTraining //main folder 
     - John // sub folder 
       - John_Smith_001, John_Smith_002, ... , 00n, //images 
     - Mary // sub folder 
       - Mary_Someone_001... you get the idea :) 

我熟悉了很多MATLAB的,而是通過外部文件迭代的方式不是。

什麼是一個簡單的實現來逐個瀏覽每個文件夾並加載圖像,理想情況下使用檢索文件名並將它們用作變量/圖像名稱。

在此先感謝。

+0

你在使用什麼操作系統? – MZimmerman6

+0

Matlab 2013,Windows,對不起。 – Reanimation

+1

看到這個職位 http://stackoverflow.com/questions/11621846/loop-through-files-in-a-folder-in-matlab –

回答

1

你可以d它是這樣的:

basePath = pwd; %your base path which is in your case myTraining 
allPaths = dir(basePath); %get all directory content 
subFolders = [allPaths(:).isdir]; %get only indices of folders 
foldersNames = {allPaths(subFolders).name}'; % filter folders names 
foldersNames(ismember(foldersNames,{'.','..'})) = []; %delete default paths for parents return '.','..' 
for i=1:length(foldersNames), %loop through all folders 
    tmp = foldersNames{i}; %get folder by index 
    p = strcat([basePath '\']); 
    currentPath =strcat([p tmp]); % add base to current folder 
    cd(currentPath); % change directory to new path 
    files = dir('*.jpg'); % list all images in your path which in your case could be John or Mary 
    for j=1:length(files), % loop through your images 
     img = imread(files(j).name); % read each image and do what you want 
    end 
end 
+0

啊,這是我一直在尋找的東西。感謝您抽出寶貴時間發佈。 – Reanimation

+0

歡迎您:) – Alyafey

+0

似乎有點冗長,做你需要的東西,你不覺得嗎?如果操作系統已經內置了這個功能,爲什麼要重新發明輪子? – MZimmerman6

1

爲JPG圖像這將是

files = dir('*.jpg'); 
for file = files' 
    img = imread(file.name); 
    % Do some stuff 
end 

,如果您有多個擴展使用

files = [dir('*.jpg'); dir('*.gif')] 

我希望這有助於

+0

感謝發佈。很高興知道。 – Reanimation

+0

upvote我的回答我需要聲譽點如此糟糕:D –

+0

好的,再次感謝你。 – Reanimation

2

使用以下命令將遞歸地列出在所有文件特定目錄及其子目錄。我已經列出了Windows和Mac/Linux。不幸的是我不能測試Mac/Linux版本,因爲我不在任何這些機器附近,但它與下面寫的很相似。

的Windows

[~,result] = system('dir C:\Users\username\Desktop /a-d /s /b'); 
files = regexp(result,'\n','Split') 

的Mac/Linux的

[~,result] = system('find /some/Directory -type file); 
files = regexp(result,'\n','Split') 

然後,您可以通過創建,files單元陣列迭代,做任何加載可能需要與imread,或東西像那

+0

真棒,非常有用,謝謝。 – Reanimation