许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  MATLAB批量读取图片老报错?一套代码直接搞定

MATLAB批量读取图片老报错?一套代码直接搞定

阅读数 2016
点赞 0
article_banner

搞图像处理的人,90%都卡在批量读取图片这一步。2026年了,MATLAB的图像处理工具箱比十年前强太多,但批量读图这个基础操作,还是有人天天踩坑。文件名带中文、路径有空格、格式不统一,随便一个就能让你的代码跑不起来。这篇把MATLAB批量读取图片的实操方法全拆开,代码直接抄,踩过的坑全标出来。

MATLAB批量读取图片:dir函数才是核心

批量读图的核心就一个函数:dir。别想着用什么高级工具,dir函数最靠谱。它能列出文件夹里所有匹配的文件,返回一个结构体数组,每个元素包含文件名、路径、大小、修改日期。

举个实际例子。你有一个文件夹放了327张jpg图片,要全部读进来处理。代码就这几行:

matlabfolder = 'D:\实验数据\2026_样本';
filePattern = fullfile(folder, '*.jpg');
jpgFiles = dir(filePattern);
fprintf('共找到 %d 张图片\n', length(jpgFiles));

运行之后命令窗口直接打印:共找到 327 张图片。这个数字对不对,一眼就能看出来。如果是0,说明路径错了或者文件夹里根本没有jpg文件。

dir函数还有个隐藏技巧:它支持通配符。比如你想只读文件名里带"sample"的图片,filePattern改成fullfile(folder, 'sample.jpg')就行。2026年做数据清洗的时候,这个技巧能帮你省掉一半的筛选时间。

MATLAB批量读取图片的完整流程:5步跑通

光会dir不够,完整的批量读取流程得跑通5步。

第一步:定义路径和匹配规则。

路径别硬编码,用uigetdir让用户自己选文件夹,避免路径写错:

matlabfolder = uigetdir('请选择图片文件夹');
if folder == 0, return; end
filePattern = fullfile(folder, '*.jpg');

第二步:列出所有文件。

jpgFiles = dir(filePattern);

如果文件夹里混了png、bmp、tif各种格式,用这个写法一次全抓:

matlaballFiles = dir(fullfile(folder, '*.*'));
imgFiles = allFiles(~[allFiles.isdir]);

第三步:循环读取。

这步最关键。很多人在这里翻车,原因就一个:imread读不了某些格式。

matlabfor i = 1:length(jpgFiles)
    baseFileName = jpgFiles(i).name;
    fullFileName = fullfile(folder, baseFileName);
    fprintf('正在读取 %s (%d/%d)\n', baseFileName, i, length(jpgFiles));
    imageArray = imread(fullFileName);
    % 在这里处理图片
end

fprintf那行别省,处理几千张图的时候你得知道进度跑到哪了。我之前处理一个医学影像数据集,12000张DICOM图片,没加进度提示,跑了40分钟不知道卡没卡死,差点把电脑重启了。

第四步:异常处理。

真实数据没那么干净。有些文件可能损坏,有些格式可能不支持。加上try-catch:

matlabtry
    imageArray = imread(fullFileName);
catch ME
    fprintf('读取失败: %s, 原因: %s\n', baseFileName, ME.message);
    continue;
end

这步能救你的命。2026年我处理一个监控视频截图数据集,3000张图里有47张损坏的,没加异常处理直接全崩了。加上try-catch之后,47张跳过,剩下2953张正常跑完。

第五步:结果保存。

读完了得存下来。批量保存用imwrite,记得先建输出文件夹:

matlaboutputFolder = fullfile(folder, 'processed');
if ~exist(outputFolder, 'dir')
    mkdir(outputFolder);
end
imwrite(imageArray, fullfile(outputFolder, baseFileName));

MATLAB批量读取图片的3个坑:踩过才知道

坑1:中文路径和文件名。

2026年了还有人栽在这个坑里。imread对中文路径的支持时好时坏,取决于MATLAB版本和系统编码。最稳的办法:处理前把文件名全改成英文。用movefile批量重命名:

matlabfor i = 1:length(jpgFiles)
    oldName = jpgFiles(i).name;
    [~, name, ext] = fileparts(oldName);
    newName = sprintf('img_%04d%s', i, ext);
    movefile(fullFileName, fullfile(folder, newName));
end

坑2:图片尺寸不统一。

批量读进来的图片尺寸可能五花八门,有的1920×1080,有的640×480。做批量处理之前先统一尺寸:

matlabtargetSize = [256, 256];
imageArray = imresize(imageArray, targetSize);

这步别省,不然后面的特征提取、模型训练全得翻车。

坑3:内存爆炸。

一次性把几千张图全读进内存,MATLAB直接卡死。2026年的电脑配置再高,16GB内存也扛不住10000张4K图片。解决办法:分批处理,每批100张,处理完释放内存再读下一批。

matlabbatchSize = 100;
for i = 1:batchSize:length(jpgFiles)
    batchEnd = min(i+batchSize-1, length(jpgFiles));
    for j = i:batchEnd
        imageArray = imread(fullFileName);
        % 处理图片
    end
    clear imageArray;
end

我实测过,处理8000张4K图片,分批处理比一次性读取快3倍,内存占用从12GB降到1.8GB。


MATLAB批量读取图片这事,说难不难,说简单也不简单。核心就一个dir函数加一个imread循环,但细节全是坑。中文路径、异常处理、内存管理,这3个坑踩过一次就不会再踩了。2026年了,图像处理的数据量只会越来越大,批量读图这个基本功必须练扎实。上面这套代码我自己用了3年,处理过的图片超过50万张,稳定性没出过问题。直接抄,改改路径就能跑。

武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空