循环读取文件夹中的图片matlab代码

参考:http://blog.csdn.net/guoxiaojie_415/article/details/21317323;http://blog.csdn.net/qikaihuting/article/details/70244416;http://blog.csdn.net/qq_18343569/article/details/50960254

本篇博文仅针对于循环读取指定文件夹下的图片文件,不涉及深度和层度遍历,但是本文循环读取的方式是以深度遍历为基础的,涉及到isdir函数,如果仅仅是读取某个文件夹下的某种特定扩展名文件,可以使用dir(\'*.m\')

Function函数

function [subdirpath] = RangTraversal(strPath)

maindir = strPath;   //strPath是string类型的字符串
subdir  = dir(maindir);  //列出指定目录下所有子文件夹和文件
subdirpath = cell(1, length(subdir));

for j = 1 : length( subdir )
    if (~( isequal( subdir(j).name, \'.\' )|| isequal( subdir(j).name, \'..\'))) %|| ~subdir(j).isdir //subdir.name是每个文件的完整名字,不包括路径
        subdirpath{j} = fullfile(maindir, subdir(j).name); //这里的maindir表示路径,fullfile表示将路径和文件名字合起来
    end
end

Matlab使用dir函数获得指定文件夹下的所有子文件夹和文件,并存放在在一种为文件结构体数组中,这个数组各结构体内容如下:

name -- 文件名

date -- 修改日期

bytes -- 文件大小

isdir -- 目录是1,不是为0

datenum -- matlab中特定的修改日期

dir函数可以有调用方式为:

dir(\'.\')列出当前目录下所有子文件夹和文件

dir(\'G:\Matlab\')列出指定目录下所有子文件夹和文件

dir(\'*.m\')列出当前目录下符合正则表达式的文件夹和文件

fullfile函数作用是利用文件各部分信息创建并合成完整文件名,它的好处在于智能拼接,比如路径为C:\Users\Administrator\Desktop,文件名为1.jpg,拼接之后为C:\Users\Administrator\Desktop\1.jpg,而strcat不会自己添加\

调用RangTraversal函数

subdirpath  = RangTraversal( \'../sampleImages\' );
filename = cell(1, length(subdirpath));
path_ab = cell(1, length(subdirpath));
suffix = {\'.jpg\', \'.bmp\', \'.tiff\', \'.png\'};

for i = 1 : length(subdirpath)
   if(subdirpath{i} ~= 0)
       [path_ab{i}, filename{i}] = fileparts(subdirpath{i});
       rgb = imread(subdirpath{i});//这里有一个代码隐患,前面的函数中列出了所有子文件夹和文件,并不全是图片文件
 gray = rgb2gray(rgb); for j = 1 : length(suffix) path_wr = strcat(\'../results/savedimages/\', [filename{i}, suffix{j}]); imwrite(gray, path_wr); end end end

这段代码的作用是循环读取文件夹内的图片,然后将其灰度化,将灰度化后的图片存入新的文件夹。

fileparts在FreeMat、Matlab中,该函数用于将一个文件的完整路径中各部分提取出来。

语法格式:

[pathstr, name, ext] = fileparts(filename)

其中filename是要解析的文件的完整路径,例如:E:\games\IGI\bin\IGI.exe。fileparts将这个文件名(包含完整路径信息)各部分分别提取到四个变量中。

其中pathstr是这个文件的路径名,name是文件名,ext是包含一个点号文件的扩展名(指定了文件的类型)。