使用matlab 将mat 文件的数据写到txt文件
为了对自己的数据集做标注,推荐使用matlab下自带的标注工具 本人使用的是matlab R2016b,标注工具位于matlab 界面的 APPS-> IMAGE PROCESSING AND COMPUTER VISION-> Training Image Labeler
本文实现的是将 mat 中的内容按照正样本的标注格式写入txt 文件中。 具体实现代码如下:
close all
clear all
clc
fid = fopen(point.txt,w); % 要写入的txt 文件
matList = dir(*.mat); % 当前路径下的mat格式文件名列表
numberofMat = length(matList); % mat 文件的个数
file_path = positive samples/;
for i=1:numberofMat
% a = importdata(matList(i).name);
a= load(matList(i).name); % 加载mat文件,其中matList(i).name是字符串,通过load加载的mat文件都是结构体类型
split_file_name = strsplit(matList(i).name,.); % 使用‘.’来分割文件名字符串
file_name = split_file_name{
1,1}; % 得到‘.’前面的部分
file_full_path = strcat(file_path, file_name,.bmp); % strcat 是拼接字符串
fprintf(fid,%s ,file_full_path); % 在txt中写入拼接好的字符串
b = fieldnames(a); % b是a中的结构体名
c = getfield(a,char(b)); % 得到结构体中的内容,即m*n 的矩阵
[rows_c,cols_c] = size(c); % 得到矩阵的行列数
fprintf(fid,%d ,rows_c); % 在txt中写入行数
for j = 1:rows_c
% 这部分是本人对mat文件内的数据做某些处理
c(j,3)=60;
c(j,4)=60;
if c(j,1)>30
c(j,1)=c(j,1)-30;
else
c(j,1)=0;
end
if c(j,2)>30
c(j,2)=c(j,2)-30;
else
c(j,2)=0;
end
if j<rows_c % 这里是防止最后在回车前出现一个空格
fprintf(fid,%g ,c(j,:));
else
fprintf(fid,%g ,c(j,1:cols_c-1));
fprintf(fid,%g,c(j,cols_c));
end
end
fprintf(fid,
); % enter 回车
end
fclose(fid);
当前路径下的部分 mat 文件列表: 得到的point.txt 文件中部分内容: 参考:
