2013-04-03 39 views
0

我正在使用sift調用一個名爲image retrieval的項目,我想從文件系統中檢索圖像。我使用的邏輯是:使用數組檢索圖像

  1. 將圖像文件名傳遞給函數。
  2. 檢查是否滿足條件。
  3. 如果滿意保存在某個數組

名當我顯示陣列我得到的文件名如: F:\ SIFT_Yantao \ demo-data \ batting.jpg,數組長度爲36,現在我的問題是如何從數組中提取文件名並顯示它?如果我用for循環..

for j=1:numel(array) 

我得到我的數組36個元素,而這是1個圖像的只是名稱...

回答

2

字符串是char類型的數組,所以你試圖(基本上)循環字符串中的字符。如果你想創建一個字符串數組,每個字符串可以有不同的長度,那麼你需要使用一個cell array of strings。一個例子是:

myArray = {'C:\some\path\to\a\file.ext', 'C:\some\path\to\another\file.ext'}; 
for jj = 1:numel(myArray) 
    disp(myArray{jj}); % Display each element 
end 

要追加到現有的單元陣列,你會怎麼做:

myArray = {}; % Initialise empty cell array 
for myLoopCounter = something 
    myArray = [myArray {theNewString}]; 
end 

如果你知道數組有多少項目在循環之前有,那麼你可以使用

myArray = cell(numberOfElements, 1); 
for myLoopCounter = something 
    myArray{myLoopCounter} = theNewString; 
end 
+0

如何將動態值添加到字符串的單元數組? – Twinkal

+0

現在,當我顯示單元格數組時,我得到了[] [1x36 char] [] [1x40 char],它應該是文件的名稱...... – Twinkal

+0

那麼這正是您應該期望看到的。如果單元陣列中的字符串太長而無法在一行中顯示出來,它將不會顯示完整的字符串,它將顯示數組的大小和類型 - 這就是它所做的。此外,對於您構建數組的方式,必定會有些奇怪,因爲您在每個字符串之前的單元格數組中都有空矩陣。 – wakjah