循環讀取圖片第一種方法①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)便可