Вот желаемый рабочий процесс:
К концу у меня должна быть структура данных, хранящая вывод кода для изображений 1-100.
Как я пошел бы о выполнении этого?
Как многие говорили, это может стать довольно большим. Есть ли причина, по которой вам нужно ВСЕ это в памяти, когда вы закончите? Не могли бы вы записать отдельные результаты в виде файлов, когда закончите с ними, так, чтобы в памяти всегда оставалось только входных и выходных изображений?
IMWRITE было бы хорошо, чтобы вытащить их из памяти, когда вы Выполнено.
Предполагая, что ваши изображения имеют последовательное имя, вы можете сделать следующее:
N = 100
IMAGES = cell(1,N);
FNAMEFMT = 'image_%d.png';
% Load images
for i=1:N
IMAGES{i} = imread(sprintf(FNAMEFMT, i));
end
% Run code
RESULT = cell(1,N);
for i=1:N
RESULT{i} = someImageProcessingFunction(IMAGES{i});
end
Массив ячеек РЕЗУЛЬТАТ
затем содержит вывод для каждого изображения.
Имейте в виду, что в зависимости от размера ваших изображений предварительная выборка изображений может привести к нехватке памяти.
Если вы знаете имя каталога, в котором они находятся, или если вы переходите в этот каталог, то используйте dir для получения списка имен изображений.
Теперь это просто цикл for для загрузки изображений. Храните изображения в массиве ячеек. Например ...
D = dir('*.jpg');
imcell = cell(1,numel(D));
for i = 1:numel(D)
imcell{i} = imread(D(i).name);
end
ОСТЕРЕГАЙТЕСЬ, что эти 100 изображений займут слишком много памяти.Например, для хранения одного изображения размером 1Kx1K потребуется 3 мегабайта, если это значения uint8 RGB. Это может показаться не такой уж большой суммой.
Но тогда для 100 таких образов потребуется 300 МБ ОЗУ. Настоящая проблема возникает, если ваши операции с этими изображениями превращают их в двойники, тогда они теперь будут занимать 2,4 гигабайта памяти. Это быстро съест имеющийся у вас объем оперативной памяти, особенно если вы не используете 64-битную версию MATLAB.