【问题标题】:Read multiple images on a folder in Matlab在 Matlab 中读取文件夹上的多个图像
【发布时间】:2026-02-04 17:20:05
【问题描述】:

我在 Matlab 中从一个文件夹中读取多个图像时遇到问题。我想用他们的原始名称阅读(使用命令 imread 因为是多波段的)。图像的名称类似于“2001_01”、“2001_02”。这是我的代码:

myPath= 'C:\images\'; %'
a=dir(fullfile(myPath,'*.tif'));
fileNames={a.name};

然后……

for k = 1:length(fileNames)
    filename = [fileNames(k).name];  
    I = imread(filename);
end

但它不起作用,我不知道如何单独保存和读取每一个。有人知道我该怎么做吗?真的提前谢谢了,

【问题讨论】:

  • 是否返回完整的文件路径?

标签: image matlab file-io


【解决方案1】:
  1. 关于第一个问题:

    但它不起作用......

    只需将dir的输出直接赋值给fileNames(不带括号):

    fileNames = dir(fullfile(myPath, '*.tif'));
    
  2. 关于第二个问题:

    ...我不知道如何单独保存imread

    您似乎需要cell array 将所有图像存储在一个集合中。首先,将元胞数组定义为正确的大小:

    C = cell(length(fileNames), 1);
    

    然后将每个图像存储到不同的单元格中:

    for k = 1:length(fileNames)
        filename = fileNames(k).name;
        C{k} = imread(filename);
    end
    

    要稍后访问元胞数组C 中的任何图像,请使用大括号 ({})。例如,第二张图片的访问方式如下:C{2}

【讨论】:

  • 感谢 Eitan 的快速回复!有用!并且有可能在 C{k} 列表中出现文件名?该列表显示“行 x 列 x 带”。
  • 您可以将C 设为具有两列的元胞数组,一列用于存储的图像,另一列用于对应的文件名。为此,请像这样初始化单元格数组:C = cell(length(filenames), 2); 并在每次迭代中分配单元格值,如下所示:C{k, 1} = filename; C{k, 2} = imread(filename);
【解决方案2】:

代替

 fileNames={a.name};

试试

fileNames = arrayfun( @(x) fullfile( myPath, x.name ), a, 'UniformOutput', false );

然后,在循环中你可以访问k-th 文件名

I = imread( filenames{k} );

【讨论】:

  • 感谢 Shai,但我收到以下消息:???索引矩阵引用不正确。
  • @user1578688 你设置k了吗?
【解决方案3】:

它是否返回完整的文件路径?文件名(k).name ?还是只是实际的文件名?您可能还需要在 myPath 后面加上文件名来处理斜线

fileName = strcat(myPath, fileName)

然后做imread,确保你在接触后看过斜线

【讨论】:

  • 在这种情况下使用fullfile 比使用strcat 更好。
  • 感谢瓦吉!是的,它返回完整的文件路径和所有文件。