使用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 文件中部分内容: 参考:

经验分享 程序员 微信小程序 职场和发展