2013-08-05 309 views
1

我在名爲Images的文件夾內有一個名爲BasePics的文件夾。 BasePics內部有30張JPEG圖像。我想知道是否有以下可能:是否可以編寫一個腳本,使用imread()命令讀取所有這些圖像。圖像的名稱有點順序:C1A_Base.jpg,C1B_Base.jpg,C1C_Base.jpg,C2A_Base.jpg,C2B_Base.jpg,C2C_Base.jpg等...一路到C10C_Base.jpgMATLAB從文件夾中讀取多個圖像

可以在循環中不知何故使用:

file = dir('Images\BasePics'); 
    NF = length(file); 
    for k = 1:NF 
     images(k) = imread(fullfile('ImagesBasePics',file(k)) 
     imagesc(images(k)) 
    end 

這是我所希望做一個粗略的想法,但我不知道它是否能與目前的命名格式我在圖片文件夾來完成。我還希望每個圖像被讀取爲自己的變量,其名稱與它在當前文件夾Images \ BasePics中命名的名稱相同或相似,而不是在一個變量images下有30個圖像的連續數組。我想有30級獨立的變量,其名稱如A1, A2,A3,B1,B2,B3等等

此外,當我剛剛問:

dir images\BasePics 

Matlab的輸出33頁的文件,而不是30有兩個額外的文件在文件夾的開頭:'。'和'..',最後一個:'Thumbs.db'當我分別查看文件夾時,這些不存在,有沒有一種方法可以讓程序上的Matlab跳過這些?

謝謝!

回答

2

既然你預先知道文件的名稱,你可以跳過dir並繼續前進,讀取文件:

for l = 'ABC' 
    for n=1:10 
     nm = sprintf('C%d%c_Base.jpg', n, l); 
     fnm = sprintf('%c%d', l, n); 
     imgs.(fnm) = imread(fullfile('images','BasePics', nm)); 
    end 
end 

現在你有一個結構imgs與領域A1 ... C10爲每個圖像。

+0

十分感謝,這正是我想要的 – user2654568

+0

也許你或@彼得可以進一步幫助我:我實際上有幾個文件夾在圖像文件夾內,每個文件夾有30張圖片。理想情況下,我想寫一個輸入爲子文件夾的函數,即「BasePics」,輸出結構爲「imgs.BasePics」或「imgs。(無論輸入是什麼)」。 – user2654568

+0

@ user2654568您可以用包含子文件夾名稱的變量替換字符串「BasicPics」 - 這基本上是您創建函數所需的全部內容。親自嘗試一下! – Shai

1

你非常接近。我只是使用dir('Images\BasePics\*.jpg')來擺脫無關的文件。

你想要的命名系統不適合額外的批處理(你真的想輸入所有的A1,A2等?)。我要麼保持連續,並存儲文件名列表匹配,或者使用結構數組,像images.C1A等

dirlist = dir('Images\BasePics\*.jpg'); 

for k = 1:length(dirlist); 
    fname = dirlist(k).name; 
    [path,name,ext] = fileparts(fname); % separate out base name of file 
    images.(name) = imread(fullfile('Images\BasePics', fname)); 
end 
相關問題