參考:http://blog.csdn.net/guoxiaojie_415/article/details/21317323;http://blog.csdn.net/qikaihuting/article/details/70244416;http://blog.csdn.net/qq_18343569/article/details/50960254
本篇博文僅針對於循環讀取指定文件夾下的圖片文件,不涉及深度和層度遍歷,但是本文循環讀取的方式是以深度遍歷為基礎的,涉及到isdir函數,如果僅僅是讀取某個文件夾下的某種特定擴展名文件,可以使用dir('*.m')
Function函數
function [subdirpath] = RangTraversal(strPath) maindir = strPath; //strPath是string類型的字符串 subdir = dir(maindir); //列出指定目錄下所有子文件夾和文件 subdirpath = cell(1, length(subdir)); for j = 1 : length( subdir ) if (~( isequal( subdir(j).name, '.' )|| isequal( subdir(j).name, '..'))) %|| ~subdir(j).isdir //subdir.name是每個文件的完整名字,不包括路徑 subdirpath{j} = fullfile(maindir, subdir(j).name); //這里的maindir表示路徑,fullfile表示將路徑和文件名字合起來 end end
Matlab使用dir函數獲得指定文件夾下的所有子文件夾和文件,並存放在在一種為文件結構體數組中,這個數組各結構體內容如下:
name -- 文件名
date -- 修改日期
bytes -- 文件大小
isdir -- 目錄是1,不是為0
datenum -- matlab中特定的修改日期
dir函數可以有調用方式為:
dir('.')列出當前目錄下所有子文件夾和文件
dir('G:\Matlab')列出指定目錄下所有子文件夾和文件
dir('*.m')列出當前目錄下符合正則表達式的文件夾和文件
fullfile函數作用是利用文件各部分信息創建並合成完整文件名,它的好處在於智能拼接,比如路徑為C:\Users\Administrator\Desktop,文件名為1.jpg,拼接之后為C:\Users\Administrator\Desktop\1.jpg,而strcat不會自己添加\
調用RangTraversal函數
subdirpath = RangTraversal( '../sampleImages' ); filename = cell(1, length(subdirpath)); path_ab = cell(1, length(subdirpath)); suffix = {'.jpg', '.bmp', '.tiff', '.png'}; for i = 1 : length(subdirpath) if(subdirpath{i} ~= 0) [path_ab{i}, filename{i}] = fileparts(subdirpath{i}); rgb = imread(subdirpath{i});//這里有一個代碼隱患,前面的函數中列出了所有子文件夾和文件,並不全是圖片文件
gray = rgb2gray(rgb); for j = 1 : length(suffix) path_wr = strcat('../results/savedimages/', [filename{i}, suffix{j}]); imwrite(gray, path_wr); end end end
這段代碼的作用是循環讀取文件夾內的圖片,然后將其灰度化,將灰度化后的圖片存入新的文件夾。
fileparts在FreeMat、Matlab中,該函數用於將一個文件的完整路徑中各部分提取出來。
語法格式:
[pathstr, name, ext] = fileparts(filename)
其中filename是要解析的文件的完整路徑,例如:E:\games\IGI\bin\IGI.exe。fileparts將這個文件名(包含完整路徑信息)各部分分別提取到四個變量中。
其中pathstr是這個文件的路徑名,name是文件名,ext是包含一個點號文件的擴展名(指定了文件的類型)。
