matlab遍历文件夹下所有图片和遍历所有子文件夹下图片

本文介绍如何使用Matlab进行图片批量处理,包括遍历文件夹内所有图片及子文件夹内的图片。提供了具体代码实例,适用于图像处理实验场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 遍历当前文件夹下所有图片

  做图像处理实验,经常需要遍历当前文件下所有图片。matlab当然很早就考虑了这个问题,库函数dir就是完成这个工作的。函数返回的是一个存放所有目录下文件信息的结构体,通过遍历结构体就可以达到访问所有文件的目的了。具体实现见下面程序:

imgPath = 'E:/imageData/';        % 图像库路径
imgDir  = dir([imgPath '*.jpg']); % 遍历所有jpg格式文件
for i = 1:length(imgDir)          % 遍历结构体就可以一一处理图片了
    img = imread([imgPath imgDir(i).name]); %读取每张图片
end

  上面imgDir返回的是一个结构体,包含每个图片name(名称),date(日期),bytes(字节数),isdir(是否为文件夹/目录),datenum(修改日期,连续日期号码)。一般我们仅需使用图片名称就可以完成图片遍历的工作。

2. 遍历当前文件夹下所有子文件夹中所有图片

  如果有做co-segmentation、多图像分类或者co-saliency等方向的人,经常会遇到需要访问不同分类图片文件夹下的图片。这时候我们就需要先遍历所有子文件夹,然后依次再遍历每个子文件夹下的图片。程序如下:

imgDataPath = 'E:/imageData/';
imgDataDir  = dir(imgDataPath);             % 遍历所有文件
for i = 1:length(imgDataDir)
    if(isequal(imgDataDir(i).name,'.')||... % 去除系统自带的两个隐文件夹
       isequal(imgDataDir(i).name,'..')||...
       ~imgDataDir(i).isdir)                % 去除遍历中不是文件夹的
           continue;
    end
    imgDir = dir([imgDataPath imgDataDir(i).name '/*.jpg']); 
    for j =1:length(imgDir)                 % 遍历所有图片
        img = imread([imgDataPath imgDataDir(i).name '/' imgDir(j).name]);
    end
end

  上面需要注意去除两个系统自带的隐藏文件夹,这个在dir函数读取所有文件时候也会全部遍历出来,然后去除非子文件夹的文件。当然,如果当前文件夹下也有图片,if语句最后一个条件不用判断了。


个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

转载请注明出处:CSDN 无鞋童鞋

<think>我们被要求使用MATLAB遍历文件夹中的图片文件,包括读取处理。根据引用内容,MATLAB提供了dir函数来获取文件夹中的文件信息,然后通过遍历这些信息来读取每个图片文件。需要注意的点:1.遍历当前文件夹下的图片文件(不包括文件夹)2.如果需要遍历文件夹,则需要递归处理(深度遍历)或者使用其他方法(如层次遍历)3.读取图片使用imread函数根据用户问题,他可能只需要遍历一个文件夹(不包括文件夹)的图片。我们将给出两种情况的代码:情况1:只遍历指定文件夹下的图片(不包含文件夹)情况2:遍历指定文件夹及其所有文件夹下的图片(深度遍历)另外,引用[5]中给出了一个例,其中包含对图片的像素操作,但用户问题中并没有要求处理图片,只是读取。因此我们专注于读取。步骤:1.指定图片文件夹路径2.使用dir函数获取文件列表3.遍历文件列表,读取每个图片文件注意:dir函数返回的是结构体数组,每个结构体包含name(文件名)、folder(所在文件夹)、date、bytes、isdir(是否为文件夹)等字段。对于情况1(无文件夹):我们可以直接使用dir([imgPath'*.jpg'])来获取所有jpg文件(也可以使用其他格式,如png)对于情况2(包含文件夹):我们需要递归地遍历所有文件夹,或者使用dir的递归模式(在较新版本中,可以使用'**/*.jpg'来递归获取)。但是,根据引用[2][3],我们也可以自己编写递归函数。考虑到兼容性,我们分别给出两种方法。方法A(情况1):只遍历当前文件夹方法B(情况2):遍历当前文件夹及其所有文件夹(递归)由于引用[1][3][4]都提供了非递归的当前文件夹遍历,而引用[2][5]涉及文件夹,我们参考这些内容。下面给出代码示例:情况1:遍历指定文件夹下的图片(不包含文件夹)```matlabimgPath='E:/imageData/';%图像库路径,注意替换为你的路径%获取所有jpg文件,如果要其他格式,修改扩展名,例如'*.png'imgDir=dir(fullfile(imgPath,'*.jpg'));%注意:使用fullfile可以跨平台(WindowsLinux/Mac)fori=1:length(imgDir)%拼接完整的文件路径imgFullPath=fullfile(imgPath,imgDir(i).name);%读取图片img=imread(imgFullPath);%在这里对img进行处理%...你的图像处理代码...end```情况2:遍历指定文件夹及其所有文件夹下的图片(深度遍历)方法1(使用递归):```matlabfunctiontraverse_folder(rootPath)%首先处理当前文件夹下的图片imgDir=dir(fullfile(rootPath,'*.jpg'));fori=1:length(imgDir)if~imgDir(i).isdirimgFullPath=fullfile(rootPath,imgDir(i).name);img=imread(imgFullPath);%处理图片...endend%然后遍历所有文件夹subDirs=dir(rootPath);fori=1:length(subDirs)ifsubDirs(i).isdir&&~strcmp(subDirs(i).name,'.')&&~strcmp(subDirs(i).name,'..')%递归调用traverse_folder(fullfile(rootPath,subDirs(i).name));endendend```调用方式:在命令窗口或脚本中调用`traverse_folder('E:/imageData/');`方法2(使用dir的递归模式,R2016b及以上):```matlab%使用'**'表示递归所有文件夹fileList=dir(fullfile('E:/imageData/','**','*.jpg'));fork=1:length(fileList)imgFullPath=fullfile(fileList(k).folder,fileList(k).name);img=imread(imgFullPath);%处理图片...end```注意:在方法2中,fileList会包含所有文件夹下的jpg文件,因此可以直接循环。用户可以根据自己的MATLAB版本需求选择方法。另外,引用[5]中给出了一个例,其中包含了修改图片像素并保存的操作,但用户问题中只要求遍历读取。如果用户需要保存,可以使用imwrite函数。最后,我们提醒用户注意路径的写法(可以使用'/'或'\',但推荐使用fullfile函数来避免平台差异)。根据用户问题,我们提供了以上解决方案。</think>### MATLAB遍历文件夹图片文件指南 在MATLAB遍历文件夹中的图片文件并进行读取处理,主要通过`dir`函数实现。以下是两种常见场景的实现方法: #### 场景1:遍历指定文件夹下的图片(不含文件夹) ```matlab imgPath = 'E:/imageData/'; % 替换为你的图片文件夹路径 imgFiles = dir(fullfile(imgPath, '*.jpg')); % 获取所有jpg文件 for i = 1:length(imgFiles) filePath = fullfile(imgPath, imgFiles(i).name); img = imread(filePath); % 读取图片 % 在此添加你的图像处理代码 % imshow(img); % 示例:显示图片 end ``` **说明:** - `dir(fullfile(imgPath, '*.jpg'))` 获取指定路径下所有jpg文件信息 - `fullfile` 函数自动处理路径分隔符,兼容不同操作系统 - 修改 `*.jpg` 可匹配其他格式(如 `*.png`, `*.bmp`) #### 场景2:递归遍历所有文件夹(深度遍历) ```matlab function processAllImages(rootPath) % 处理当前文件夹图片 imgFiles = dir(fullfile(rootPath, '*.jpg')); for i = 1:length(imgFiles) if ~imgFiles(i).isdir img = imread(fullfile(rootPath, imgFiles(i).name)); % 图像处理代码 end end % 递归处理文件夹 subDirs = dir(rootPath); for j = 1:length(subDirs) dirName = subDirs(j).name; if subDirs(j).isdir && ~strcmp(dirName, '.') && ~strcmp(dirName, '..') processAllImages(fullfile(rootPath, dirName)); end end end % 调用示例 processAllImages('E:/imageData/'); ``` #### 关键函数说明: 1. **`dir`函数** 返回包含文件信息的结构体数组,包含字段: - `name`:文件名 - `folder`:所在文件夹路径 - `isdir`:是否为目录 - `bytes`:文件大小 - `date`:修改日期 2. **`fullfile`函数** 智能构建文件路径,自动处理操作系统差异: ```matlab % Windows系统生成:E:\imageData\pic1.jpg % Linux/Mac系统生成:E:/imageData/pic1.jpg filePath = fullfile('E:', 'imageData', 'pic1.jpg') ``` 3. **图像处理扩展** 读取后可添加处理代码: ```matlab % 示例:转换为灰度图 grayImg = rgb2gray(img); % 示例:调整尺寸 resizedImg = imresize(img, [256 256]); % 示例:保存处理结果 imwrite(processedImg, 'output.jpg'); ``` #### 注意事项: 1. **路径格式**:建议使用`/`作为路径分隔符(MATLAB全平台兼容) 2. **文件过滤**:使用通配符精确匹配文件类型(如`*.png`) 3. **特殊目录**:遍历时需排除`.`(当前目录)`..`(上级目录) 4. **内存管理**:处理大量图片时,建议逐张读取处理避免内存溢出 > 引用说明:MATLAB遍历文件夹的基本方法主要通过`dir`函数实现[^1],深度遍历需要递归处理文件夹[^2],实际应用中需注意文件路径的跨平台兼容性[^3]。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值