最近有个目标检测的项目,我来搞定数据集,需要把.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))#完成文件
运行效果:
![](https://i-blog.csdnimg.cn/blog_migrate/8f8ef886e5dbacaac4b64b3e2a25b23b.png)
输入annotation
我的.mat文件是这样的:
![](https://i-blog.csdnimg.cn/blog_migrate/54856f43c2194b96cb96734b05bb8fd5.png)
之后便自动完成
![](https://i-blog.csdnimg.cn/blog_migrate/86e2ce64fed76b24b1ae8ae49ca724fa.png)
完成检测!
生成的.txt文件是这样的
![](https://i-blog.csdnimg.cn/blog_migrate/eeb4ac75482b68cb1fc1e78218bb64e0.png)
第一列是标签,后面分别是(x1,y1),(y2,y2),一共五个数据。
本人很菜,只是作为记录,如有不标准,请多包涵!