You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB R2015a递归读取子目录图片失败问题求助

解决MATLAB R2015a递归读取子文件夹图片的问题

你遇到的问题其实是版本兼容性导致的——MATLAB R2015a并不支持**这种递归通配符,这个便捷的通配符特性是从R2016b才开始加入的,所以你用dir('main_folder/**/*.jpg')根本搜不到任何文件,自然读不出图片。下面给你两种适配R2015a的可行方案,亲测有效:

方案一:手动遍历子文件夹

先定位main_folder下的所有子目录,再逐个读取每个子目录里的jpg文件,逻辑清晰,适合你这种固定层级的结构:

mainFolder = 'main_folder';
% 获取mainFolder下的所有子目录
subFolders = dir(mainFolder);
subFolders = subFolders([subFolders.isdir]); % 筛选出目录项
% 排除系统默认的.和..目录
subFolders = subFolders(~ismember({subFolders.name}, {'.', '..'}));

% 建议用cell数组存储图片,比固定尺寸矩阵更灵活
imageCell = cell(0);

% 遍历每个子文件夹
for i = 1:length(subFolders)
    subFolderPath = fullfile(mainFolder, subFolders(i).name);
    % 获取当前子文件夹下的所有jpg图片
    imageFiles = dir(fullfile(subFolderPath, '*.jpg'));
    
    % 遍历当前子文件夹的每一张图片
    for j = 1:length(imageFiles)
        % 用fullfile拼接路径,避免手动加/出错
        imagePath = fullfile(subFolderPath, imageFiles(j).name);
        I = imread(imagePath);
        I = imresize(I, [128 128]);
        % 存入cell数组,如果需要一维向量可以用reshape(I,1,[])
        imageCell{end+1} = I;
    end
end

% 如果最后需要转为矩阵(假设所有图片都是同尺寸同通道)
arrayImage = cell2mat(cellfun(@(x) reshape(x,1,[]), imageCell, 'UniformOutput', false));

方案二:用genpath自动获取所有递归路径

如果以后子目录层级变多,genpath可以自动递归生成所有子文件夹的路径,更通用:

mainFolder = 'main_folder';
% 生成所有递归子文件夹的路径字符串,用系统路径分隔符分隔
folderPaths = genpath(mainFolder);
% 分割成单个文件夹路径的列表
folderList = strsplit(folderPaths, pathsep);

imageCell = cell(0);

for i = 1:length(folderList)
    currentFolder = folderList{i};
    if isempty(currentFolder)
        continue; % 跳过空路径
    end
    % 获取当前文件夹下的jpg文件
    imageFiles = dir(fullfile(currentFolder, '*.jpg'));
    for j = 1:length(imageFiles)
        imagePath = fullfile(currentFolder, imageFiles(j).name);
        I = imread(imagePath);
        I = imresize(I, [128 128]);
        imageCell{end+1} = I;
    end
end

% 转为矩阵(按需使用)
arrayImage = cell2mat(cellfun(@(x) reshape(x,1,[]), imageCell, 'UniformOutput', false));

几个关键注意点

  • 别用手动拼接路径:fullfile会自动适配Windows的\和Mac/Linux的/,避免路径格式错误。
  • 避免预分配错误尺寸:你原来的zeros(numData, 133183)需要提前知道总图片数,而且如果是RGB图片,1281283=49152,和你写的133183不符,很容易出问题。用cell数组存储原始图片更稳妥。
  • 兼容多格式:如果子文件夹里有png等其他格式,可以把*.jpg改成*.{jpg,png}来匹配多种图片格式。

内容的提问来源于stack exchange,提问作者gordon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:17:26