Рекурсивно читать изображения из подкаталогов - PullRequest
0 голосов
/ 25 мая 2018

Я застрял на чем-то, что должно быть таким простым.

У меня есть папка, скажем main_folder с четырьмя подпапками, скажем sub1, sub2, sub3 и sub4 каждый содержит более 100 изображений.Сейчас я пытаюсь прочитать и сохранить их в массиве.Я просмотрел весь Интернет и некоторые документы MATLAB: здесь , здесь и даже официальный документ .

Мой код выглядит следующим образом:

folder = 'main_folder/**'; %path containing all the training images
dirImage = dir('main_folder/**/*.jpg');%rdir(fullfile(folder,'*.jpg')); %reading the contents of directory

numData = size(dirImage,1);    %no. of samples

arrayImage = zeros(numData, 133183); % zeros matrix for storing the extracted features from images

for i=1:numData
        ifile = dirImage(i).name;
%         ifolder = dirImage(i).folder;
        I=imread([folder, '/', ifile]);  %%%% read the image  %%%%%
        I=imresize(I,[128 128]);
        ...

Если я попробую код из приведенного выше фрагмента, изображения не будут прочитаны.Но если я заменю первые две строки чем-то вроде:

folder = 'main_folder/'; %path containing all the training images
dirImage = dir('main_folder/sub1/*.jpg'); %rdir(fullfile(folder,'*.jpg'));

, тогда все изображения в sub1 будут прочитаны.Как я могу это исправить?Любая помощь будет высоко оценена.Я хочу прочитать все изображения в четырех подпапках одновременно.Я использую MATLAB R2015a.

1 Ответ

0 голосов
/ 25 мая 2018

Полагаю, вам нужно будет использовать genpath, чтобы получить все подпапки, а затем перебрать каждую из них, например:

dirs = genpath('main_folder/'); % all folders recursively
dirs = regexp(dirs, pathsep, 'split'); % split into cellstr
for i = 1:numel(dirs)
    dirImage = dir([dirs{i} '/*.jpg']); % jpg in one sub-folder
    for j = 1:numel(dirImage)
        img = imread([dirs{i} '/' dirImage(j).name]);
        % process img using your code
    end 
end
...