以下是所需的工作流程:
最后,我应该有一个数据结构存储图像1-100的代码输出。
我将如何做到这一点?
答案 0 :(得分:9)
如果您知道它们所在目录的名称,或者您是否知道该目录,那么请使用dir获取图像名称列表。
现在它只是一个for循环加载图像。将图像存储在单元格阵列中。例如......
D = dir('*.jpg');
imcell = cell(1,numel(D));
for i = 1:numel(D)
imcell{i} = imread(D(i).name);
end
请注意这100张图片会占用太多内存。例如,如果是uint8 RGB值,则单个1Kx1K图像将需要3兆字节存储。这可能看起来不是很大。
但是这些图像中的100个将需要300 MB的RAM。真正的问题是,如果你对这些图像的操作将它们变成双打,那么它们现在将占用2.4 GIGAbytes的内存。这将很快占用你的RAM量,特别是如果你没有使用64位版本的MATLAB。
答案 1 :(得分:4)
假设您的图像是按顺序命名的,您可以这样做:
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
然后,单元格数组RESULT
包含每个图像的输出。
请注意,根据图像的大小,预取图像可能会使内存不足。
答案 2 :(得分:4)
正如许多人所说,这可能会变得非常大。当你完成后,你有没有理由在记忆中需要所有这些?你完成它们后可以把各个结果写成文件,这样你在给定的时间内输入和输出图像就不会超过内存吗?
当你完成时,IMWRITE会让你的内存不足。