matlab在循环中保存jpg格式_Matlab如何循环读取文件

循环读取图片第一种方法①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()函数巧妙运用循环实现图片的连续读入。

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

文件名规律(比如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个。现在要把该数据文

件的所有数据读入一个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下得到的是个字符行向量。当然,处理下也可以批量读取数据文件,不过不想再写了。

因为另外一个函数也可以实现批量处理数据文件的功能。即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

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还可以遍历一个文件夹下的所有子文件夹。 1、利用

dir(外层文件夹)获取子文件夹;

2、利用dir(子文件夹)获取子文件夹中的文件信息;

3、遍历文件,做处理;对于遍历文件夹,也可以使用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)即可

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值