5

我在从文件夹中读取 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

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

4

3 回答 3

6
  1. 关于第一个问题:

    但它不起作用...

    只需将输出dir直接分配到fileNames(不带括号):

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

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

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

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

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

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

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

于 2013-04-24T11:28:47.120 回答
2

代替

 fileNames={a.name};

尝试

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

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

I = imread( filenames{k} );
于 2013-04-24T11:32:51.750 回答
1

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

fileName = strcat(myPath, fileName)

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

于 2013-04-24T11:28:26.930 回答