如何在Matlab中使用dir获取的文件名变量作为imread的输入参数
问题核心原因
你调用imread报错主要是两个常见问题:
dir不带参数返回的结果包含当前目录.和上级目录..两个文件夹条目,这两个不是图像文件,传入imread必然报错- 如果你要读取的图像不在Matlab当前工作路径下,只传文件名
images(i).name会找不到文件,需要拼接完整路径
修正方案
步骤1:指定读取目录和图像后缀过滤,排除非图像条目
调用dir时直接指定图像后缀过滤,避免拿到文件夹和其他非图像文件,比如读取jpg文件就写dir('*.jpg'),多后缀可以叠加结果,保证返回的条目全是可读取的图像文件。
步骤2:拼接完整文件路径,避免工作路径不匹配的问题
dir返回的结构体自带folder字段存储文件所在目录路径,和name字段拼接即可得到无平台兼容问题的完整路径,不会出现找不到文件的问题。
完整可运行代码
% 指定图像所在目录,当前目录填pwd(),也可写绝对路径比如'D:/test_images' img_folder = pwd(); % 按实际图像格式调整后缀过滤规则,此处示例过滤jpg、png两种格式 images = dir(fullfile(img_folder, '*.jpg')); images = [images; dir(fullfile(img_folder, '*.png'))]; % 直接获取有效图像文件总数 imageslength = length(images); for i = 1:imageslength % 拼接完整路径作为imread入参 img_full_path = fullfile(images(i).folder, images(i).name); cimg = imread(img_full_path); % 此处写入你原有的图像处理逻辑 % etc etc end
补充说明
如果你不想按后缀过滤,也可以手动剔除目录条目,在获取images后加一行代码即可:images(ismember({images.name}, {'.', '..'})) = [];
不需要手动写5000次调用,循环处理是完全合理的方案,只要过滤掉非法条目、传入合法路径即可正常运行。
内容的提问来源于stack exchange,提问作者dalrymju
相关产品推荐
相关产品推荐

