2016-05-25 3 views
0

Я хочу подсчитать количество изображений в папке, используя графический интерфейс, созданный в Matlab guide 2015b. Я написал этот код:Matlab: подсчет изображения в папке с использованием matlab GUI

Id = 3 (actually the value of id will be given by user at   run time) 
path =strcat (' c:\user\Desktop\New\TrainData\',Id) 
path=strcat (path,'\') 
d=dir (path) 
n=length (d) 

Это показывает ошибку, что dir не может быть использован для ввода клеток. Этот код работает, когда я использую командную строку. Он показывает ошибку только тогда, когда я хочу использовать ее через графический интерфейс. Сначала я думал, что это проблема в отношении пути. Итак, я показал путь, но дал отличный результат. Я смущен. Просьба представить некоторые решения в Matlab

ответ

1

Вместо strcat вы должны использовать fullfile:

path = fullfile('c:\user\Desktop\New\TrainData',num2str(Id)) 

И будьте осторожны с реж, реж также список вложенного так убедитесь, что вы принимаете во внимание только файл изображения:

d = dir(path); 
name = d(~[d.isdir]).name 
1

Скорее всего, вы получаете переменную Id от inputdlg или что-то в этом роде. Он считывается как массив ячеек строк, а не строка. Вы можете проверить это с помощью iscell:

iscell(Id) 
% 1 

Вы не видите никаких проблем, пока не попал в команду dir, потому что strcat способен справиться с этим очень хорошо, но также дает массив ячеек строк.

out = strcat('123', {'4'}); 
class(out) 
% cell 

Если вы читали ваше сообщение об ошибке тщательно, ошибка явно указывает, что вход dir является клетка, а не строка. Способ исправить это - сначала проверить, является ли Id массивом ячеек и при необходимости преобразовывается в строку.

Id = inputdlg('Enter an ID'); 

% Convert to a string if Id is a cell array 
if iscell(Id) 
    Id = Id{1}; 
end 

% Get a listing of all files/directories 
d = dir(fullfile(folder, num2str(I))); 

% Get number of files 
nFiles = sum(~[d.isdir]); 

Кроме того, вы не хотите, чтобы попытаться объединить ряд со строкой (strcat('abc', 1)), потому что это будет преобразовывать число в это ASCII-код. Вместо этого вы хотите использовать num2str, как показано выше.

+0

Когда свойство '' String'' '' edit'' 'uicontrol' возвращает массив ячеек? – excaza

+0

@excaza Ну, это может * держать массив ячеек, но вы правы, я действительно думал о 'inputdlg'. Я обновлю. – Suever

Смежные вопросы