开源数据的标注文件大多为mat格式,而在P2PNet框架下需要转为txt格式的文件。
笔者在网上找的大多是利用matlab进行转换 python的较少 且乱
笔者写的代码如下:
import os
import scipy.io as sio
def mat_to_txt(mat_file_path, txt_file_path):
# 读取 .mat 文件中的 positions 数组
data = sio.loadmat(mat_file_path)
#############################################要依据打印出来的东西修改annPoints.
print(type(data))
print(data)
positions = data['annPoints'] # 假设 .mat 文件中的变量名是 'annPoints'
# 检查 positions 是否是一个二维数组,且每行有两个元素
if positions.ndim != 2 or positions.shape[1] != 2:
raise ValueError("positions should be a 2D array with 2 columns")
# 将 positions 数组写入 .txt 文件
with open(txt_file_path, 'w') as f:
for x, y in positions:
# 写入 x, y 坐标,每行一对坐标
f.write(f'{x} {y}\n')
print(f"转换完成:从 {mat_file_path} 到 {txt_file_path}")
def convert_all_mats_in_directory(directory_path):
# 遍历目录中的所有文件
for filename in os.listdir(directory_path):
if filename.endswith('.mat'): # 检查是否是 .mat 文件
mat_file_path = os.path.join(directory_path, filename)
# 构造 .txt 文件的路径,保持文件名不变,只改变扩展名
txt_file_path = os.path.join(directory_path, os.path.splitext(filename)[0] + '.txt')
# 调用 mat_to_txt 函数进行转换
mat_to_txt(mat_file_path, txt_file_path)
# 使用示例
mat_files_directory = r"Q:\crowde counting\label\label_18\label_18\test" # 替换为你的 .mat 文件所在的目录路径
convert_all_mats_in_directory(mat_files_directory)
你要修改两个地方:
1:你mat目录的地址
2:你mat文件的“键”是什么(python读进来是一个字典文件,具体键名要打印出来看看。比如我的键就是annPoints)
完成后效果:
txt文件内容:
ok写完了 有什么问题评论区问 看到会回