做圖像處理實驗,經常需要遍歷當前文件下所有圖片。matlab當然很早就考慮了這個問題,庫函數dir就是完成這個工作的。函數返回的是一個存放所有目錄下文件信息的結構體,通過遍歷結構體就可以達到訪問所有文件的目的了。具體實現見下面程序:
imgPath = 'E:/imageData/'; % 圖像庫路徑
imgDir = dir([imgPath '*.jpg']); % 遍歷所有jpg格式文件
for i = 1:length(imgDir) % 遍歷結構體就可以一一處理圖片了
img = imread([imgPath imgDir(i).name]); %讀取每張圖片
end
上面imgDir返回的是一個結構體,包含每個圖片name(名稱),date(日期),bytes(字節數),isdir(是否為文件夾/目錄),datenum(修改日期,連續日期號碼)。一般我們僅需使用圖片名稱就可以完成圖片遍歷的工作。
2. 遍歷當前文件夾下所有子文件夾中所有圖片
如果有做co-segmentation、多圖像分類或者co-saliency等方向的人,經常會遇到需要訪問不同分類圖片文件夾下的圖片。這時候我們就需要先遍歷所有子文件夾,然后依次再遍歷每個子文件夾下的圖片。程序如下:
imgDataPath = 'E:/imageData/';
imgDataDir = dir(imgDataPath); % 遍歷所有文件
for i = 1:length(imgDataDir)
if(isequal(imgDataDir(i).name,'.')||... % 去除系統自帶的兩個隱文件夾
isequal(imgDataDir(i).name,'..')||...
~imgDataDir(i).isdir) % 去除遍歷中不是文件夾的
continue;
end
imgDir = dir([imgDataPath imgDataDir(i).name '/*.jpg']);
for j =1:length(imgDir) % 遍歷所有圖片
img = imread([imgDataPath imgDataDir(i).name '/' imgDir(j).name]);
end
end
上面需要注意去除兩個系統自帶的隱藏文件夾,這個在dir函數讀取所有文件時候也會全部遍歷出來,然后去除非子文件夾的文件。當然,如果當前文件夾下也有圖片,if語句最后一個條件不用判斷了。