matlab中的文件操作

matlab中的fscanf、fprintf针对文本

操作示例:

clear;clc;
% text format
% 写入文件
a = 1 : 12;  
fid = fopen('data.txt', 'w');  
fprintf(fid, '%d ', a);                 % 文件中数据按空格隔开
fclose(fid); 

% 从文件中读出数据到矢量a
fid = fopen('data.txt', 'r');  
[a count1] = fscanf(fid, '%d', inf);     % 读出的a为列矢量[1:12]'
fclose(fid);
disp(a);

% 从文件中读出数据到矩阵b(mxn),必须满足m*n小于元素个数
fid = fopen('data.txt', 'r');  
[b count2] = fscanf(fid, '%d', [4 3]);  % 读出的b为(4 rows, 3 cols)矩阵 
fclose(fid); 
disp(b);
%   b的保存格式为:
%      1     5     9
%      2     6    10
%      3     7    11
%      4     8    12
matlab中的fopen、fread、fwrite针对的是二进制文件

操作示例:

clear;clc;
% binary format
a = 1 : 24;  
fid = fopen('myfile1.yuv', 'wb'); 
fwrite(fid, a, 'uchar');
fclose(fid);
% 保存格式为:
% 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10
% 11 12 13 14 15 16 17 18

fid = fopen('myfile2.yuv', 'wb'); 
for i = 1:3
	fwrite(fid, a, 'uchar');    %重复写3次a到文件中
end;
fclose(fid);
% 保存格式为:
% 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10
% 11 12 13 14 15 16 17 18 01 02 03 04 05 06 07 08
% 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18
% 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10
% 11 12 13 14 15 16 17 18

% 矢量方式读取部分数据
fid = fopen('myfile2.yuv', 'rb');  
[a count1] = fread(fid, 24, 'uchar');    % 只读出前24位(a为列矢量)
fclose(fid);
disp(a);

% 矢量方式读取所有数据
fid = fopen('myfile2.yuv', 'rb');  
[b count2] = fread(fid, inf, 'uchar');   % 读出所有位(列矢量),inf表示文件尾部
fclose(fid);
disp(b);

% 【2】matrix方式读取
fid = fopen('myfile2.yuv', 'rb');  
[c count3] = fread(fid, [4 6], 'uchar');    % 只读出前24位,保存为(4 rows, 6 cols)矩阵
fclose(fid); 
disp(c);
%   c的保存格式为:
%      1     5     9    13    17    21
%      2     6    10    14    18    22
%      3     7    11    15    19    23
%      4     8    12    16    20    24
以下代码为截取一段CIF文件的前20帧,并保存为out.yuv
clear;
clc;
row = 352;
col = 288;
frameNum = 20;
buf =  frameNum*(row*col*3/2);

fid = fopen('input.yuv', 'rb');  
%a = fread(fid, buf, 'uchar');    %如果想截取第21~第40帧,只需加上这一句即可
a = fread(fid, buf, 'uchar');  
fclose(fid);

fid = fopen('output.yuv', 'wb'); 
fwrite(fid, a, 'uchar');       
fclose(fid);


(待续。。。)

















你可能感兴趣的:(Others)