【发布时间】:2012-07-20 14:20:49
【问题描述】:
这是所需的工作流程:
- 我想将 100 张图像加载到 MATLAB 工作区中
- 在图片上运行我的一堆代码
- 将我的输出(我的代码返回的输出是一个整数数组)保存在一个新数组中
到最后,我应该有一个数据结构来存储图像 1-100 的代码输出。
我该怎么做呢?
【问题讨论】:
这是所需的工作流程:
到最后,我应该有一个数据结构来存储图像 1-100 的代码输出。
我该怎么做呢?
【问题讨论】:
如果您知道它们所在目录的名称,或者如果您 cd 到该目录,则使用 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 MB 来存储。这似乎不是一个巨大的数额。
但是其中 100 个图像将需要 300 MB 的 RAM。如果您对这些图像的操作将它们变成双精度图像,那么真正的问题就出现了,那么它们现在将占用 2.4 GB 的内存。这将很快耗尽您拥有的 RAM 量,尤其是在您使用的不是 64 位版本的 MATLAB 时。
【讨论】:
假设您的图像是按顺序命名的,您可以这样做:
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 然后包含每个图像的输出。
请注意,根据图像的大小,预取图像可能会导致内存不足。
【讨论】:
正如许多人所说,这可能会变得非常大。完成后,您是否有理由需要将所有这些都保存在内存中?您是否可以在处理完单个结果后将它们写成文件,这样在给定时间内存中的输入和输出图像永远不会超过它们?
当你完成后,IMWRITE 会很好地让它们从内存中消失。
【讨论】: