单目标检测数据集mat文件转化txt

本文介绍了一个使用Python和Scipy库将.mat文件转换为.txt文件的过程,适用于目标检测项目的数据预处理。代码读取.mat文件,提取所需信息,并批量保存为适合目标检测任务的.txt文件格式,每个文件包含标签和坐标信息。
摘要由CSDN通过智能技术生成

  最近有个目标检测的项目,我来搞定数据集,需要把.mat文件转化为.xml文件,经过仔细的查阅自己完成了转化,下面是代码讲解:

# 导入包
import scipy.io as sio
import numpy as np
import os

def mat_txt(mat_file_path,save_txt_file_path):
    '''
    :param mat_file_path:保存mat文件的文件夹地址
    :param save_txt_file_path: 将生成的txt文件放到txt_file中,并把txt_file保存在这里
    :return: 无
    '''


    #读取mat文件格式
    mat_filename_list = os.listdir(mat_file_path)  #将文件夹中的文件名读出,作为列表
    # 确定你需要信息的值
    matdata = sio.loadmat(os.path.join(mat_file_path,mat_filename_list[0])) #读取mat文件
    print("mat文件中共有这些信息:",matdata.keys(),"请选择:")# 提取数据:是以字典的形式存储的,看有哪些key,确认自己需要哪部分信息
    key = str(input())
    your_key = matdata[key]   #将key提取出来
    print("你的信息是这样的:")
    print(your_key)


    if not os.path.exists(save_txt_file_path+"/txt_file"):  #创立一个txt_file文件夹
        os.makedirs(save_txt_file_path + "/txt_file")


    # 批量转化 mat 文件为 txt 文件并保存在桌面的 txt_file 文件夹中
    for mat_filename in mat_filename_list:
        matdata = sio.loadmat(os.path.join(mat_file_path, mat_filename))
        data1 = matdata[key]

        data2 = data1[0][0][1]  #注意data必须处理为二维数组

        for i in range(len(data2)):
            if (i%2)==1:
                data3 = np.hstack(([0] ,data2[i-1],data2[i])#此步骤是把(x1,y1)(x2,y2)合并为一个数组。这里就是最后要写入txt文件的.由于是单目标检测,所以图个方便,并没有考虑类别,直接把它定义为零,若是要是多目标检测 要修改这里
                data.append(data3)         #也就是每两个放在一起
                data.append(data3)
        txt_filename = mat_filename[: -4 ] + ".txt"  # 例如将“0001.mat” 改为 “0001.txt”
        savetxt_path = os.path.join(save_txt_file_path+ "/txt_file",txt_filename)#对保存路径进行设置
        np.savetxt(savetxt_path, data,)  # fmt为保存格式,可不填,会以默认格式保存
        print("finished:",os.path.join(mat_file_path, mat_filename))#完成文件

运行效果:

输入annotation

我的.mat文件是这样的:

之后便自动完成

完成检测!

生成的.txt文件是这样的

第一列是标签,后面分别是(x1,y1),(y2,y2),一共五个数据。

本人很菜,只是作为记录,如有不标准,请多包涵!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值