循环读取图片第一种方法①List =dir('*.jpg');
%如需其它图片格式支持,能够本身【重载dir()】函数,实现查找全部图片文件的功能,
%若是图片是其它路径,能够用 ["路径" ".扩展名"] 字符串来实现。
k =length(dList);
for i=1:1:k
image_data{i}=imread(dList(i).name);
end
第二种方法②I=ones(8,5);
q=reshape(49:56,8,1);
I(:,1)=q;
I(:,2)='.';
I(:,3)='b';
I(:,4)='m';
I(:,5)='p';
L=setstr(I); %将ASCII码转为字符串;
第三种方法③
images= [ ];
for i= 1:M
str= strcat ('D: \MATLAB\work\', int2str(i) , ’.bmp’) ; % 链接字符串造成图像的文件名。
img= imread(str);
[rows cols]= size(img) ; % 得到图像的行和列值。
temp= reshape ( img, rows*cols, 1) ; % 建立一个(N1*N2)×1 矩阵。
images= [ images temp ]; % 完成循环后的images 矩阵是一个(N 13 N 2) ×M 矩阵。
end
上述三种方法中,第一种主要利用dir()函数,得到文件夹内图片的信息,而后建立一个元胞数组,将图片文件信息送入元胞数组
第二种方法是已知图片文件名,而且按数字顺序排列,而后利用数字和字符串之间的转换来进行。
第三种方法利用字符串链接函数strcat()函数巧妙运用循环实现图片的连续读入。
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\windows
文件名规律(好比qnl260.200,qnl260.201,qnl260.202~~qnl260.300)的多个二进制文件进行一样的处理,
问题是怎么循环的读入这些文件,就是想编个程序让它读取第一个数据处理,而后读取第二个数据处理,以此类推
file=dir('*.txt');
data=cell(1,size(file,1));
for i=1:size(file,1);
data{1,i}=read(file(i).name);
end数组
获取路径的文件索引后读入
具体的read模式能够参见help
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
如今假定有一个数据文件叫data.dat,它的前面2k是存放参数的,咱们作数据处理的时候须要跳过去,后面的数据是16位整数类型的,每组数据有512个。如今要把该数据文less
件的全部数据读入一个nx512的矩阵中,n的个数不定,根据数据文件中的数据而定。
用.m脚本的方式编写以下:
% deal data from specified data file
clear ;
data_fname = 'data.dat' ; % 这里是文件名
jump_distance = 2048 ; % 这里是跳过的字节数
% 打开方式为二进制打开,其实'r'就行,matlab是默认二进制形式打开文件的
file_id = fopen(data_fname, 'rb');
% 从文件开始跳过jump_distance个字节
fseek(file_id, jump_distance, 'bof');
% 先手工构造一个1x512大小的矩阵
raw_data = [1:1:512] ;
while feof(file_id) == 0
% 这就是大名顶顶的fread了,数据类型是int16,每次读入512个数
% raw_array每次都是512x1的矩阵,ele_count为读入的数的个数(正常状况下应为512)
[row_array, ele_count] = fread(file_id, 512, 'int16') ;
if ele_count < 512 % elecount < 512表明数据不够,已经到了文件的结尾
break ;
else
% 将512x1的row_array转置一下,变为1x512的矩阵
row_array = row_array' ;
% 而后,将row_array追加到raw_data中
raw_data = [raw_data; row_array] ;
end
end
% get off the first line [1:1:512]
% 这里就是要把raw_data的第一行数据手工构造的那行数据给去掉,剩下的就都是文件中的数据了
raw_data(1,:)=[] ;
% 关闭文件
fclose(file_id);
% delete other usless vars
% 这里是把用过的变量都删除掉,省得workspace里面乱七八糟的什么都有,这是个好习惯,呵呵。
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
matlab中读取某个文件夹下全部数据文件
怎么用matlab读取多个数据文件?函数
1:若是文件名规则
% 文件目录:
my_dir=' /home/my_calculation1/test1/';
%文件名前缀
my_pre_T='test';%文件数目fnum =1:32; %Read filesfor i=1:length(fnum) filename = [my_dir,prefix_T1 num2str(fnum(i))]; 而后dlmread,fopen等操做就不需详写网站
了!与单个文件同样。
end
2:文件夹数据批量读取的问题,命名无规则
在windows下很简单,ls函数即可以获得一个包含全部文件名的字符矩阵。惋惜在unix下获得的是个字符行向量。固然,处理下也能够批量读取数据文件,不过不想再写了。spa
由于另一个函数也能够实现批量处理数据文件的功能。即dir函数
LS displays the results of the 'ls' command on UNIX.
On UNIX, LS returns acharacter row vectorof filenames separated by tab and space characters.
On Windows, LS returns anm-by-n character array of filenames, where m is the number of filenames and n is the number of characters in the longest unix
filename found. Filenames shorter than n characters are padded with space characters.
下面介绍下使用dir函数读取文件夹中文件的程序
2.1 读取全部扩展名为.dat的数据文件,并进行处理。
matlab中,也可使用通配符的。下面就来展现下:
如今有一个文件夹里面有50个的.dat文件.每一个文件大概三万行.两列,第一列是字符串,第二列是浮点数字.批量读取这个文件夹里的.dat文件的第二列。读取完之后的数组变索引
量名就是.dat的文件名
假定.dat文件在/home/my_calculation1/test1/ 文件夹下,文件名符合matlab变量名的命名规则,要读取第二列的浮点数字为数组并以文件名为变量名。图片
mydir='/home/my_calculation1/test1/';
temp1=dir([mydir,'*.dat']);
num_temp1=length(temp1);
for i1=1:num_temp1
filename=[mydir,temp1(i1).name];
temp=dlmread(filename,'',0,1);
eval([temp1(i1).name(1:end-4),'=temp;'])
dlmread,fopen等操做就不需详写了!与单个文件同样。end
注意:若是直接使用 temp1=dir(mydir]);读取文件夹下全部文件,应当从第三个开始才是目录下的文件。另外,使用dir还能够遍历一个文件夹下的全部子文件夹。 一、利用ci
dir(外层文件夹)获取子文件夹;
二、利用dir(子文件夹)获取子文件夹中的文件信息;
三、遍历文件,作处理;对于遍历文件夹,也可使用mathworks网站上的函数dirr轻松搞定。下面是饮水思源论坛上的作法。没有进行整理。敬请原谅。
论坛地址:
如今有个文件夹data中的数据想要批量处理,
而data中有多个子文件夹,名字分别为01001,01002,…,每一个子文件夹中有多个数据,假设为ECG.txt,PCG.txt,…。
如今我想要依次读取01001中的各数据进行处理,而后读取01002中的进行处理,依此类推,直到将data文件夹中的数据全都处理完。
我知道在labview中能够把文件夹的名字弄成字符拼接后能够不断的循环读取,不知道在matlab中如何实现这样的功能?
由于这几天连着作实验,今天才有时间上网看一下,
回复比较晚。刚刚下载了名为dirr.m的文件。LIST=DIRR('D:\data');能够实现将data中的子文件夹全都读取进来。存为一个名为LIST的struct。
以01001文件夹中的数据为例,能够知道每一个数据的位置了,但是我应该如何读取出来呢?
例如LIST(1).isdir(1)中的是CPT.txt,可是我只能获得一个存有该文件名字和大小等的struct格式,
不知道应该如何读入该数据。eval命令不知道该如何用?试了一下eval(LIST(1).isdir(1)),出现错误,
说是该命令不能作struct类。
cottonsugar (棉花糖) 于 2009年09月23日18:25:30 星期三) 提到:
fl=dirr('./');nl=length(fl);for i=1:nl fname=fl(i).name; if strcmp(fname,'XXXX') str=['load ',fname];eval(str);enden
最后的关键就在于load那句了。str=['load(D:\data\',fl(i).name,'\',fname,')'];由于load在用的时候是:load('D:\data\01001\ECG.txt');
如今我没法加上那个括号里面的一撇',因此老是没法把数据load上。请问这个一撇怎么加上呢?谢谢啦。我改了之后的程序以下:
fl=dirr('D:\data');nl=length(fl);nl2=length(fl(1).isdir);
for i=1:nl for j=1:nl2 fname=fl(i).isdir(j).name;
if strcmp(fname,'ECG.txt') str=['load(D:\data\',fl(i).name,'\',fname,')'];eval(str);
end
end
end
好比你想load一个文件 load('d:\ecg.txt');用string来表示就是str=['load(''d:\ecg.txt'');'];而后再eval(str)便可