提取mat标注文件中的关键点数量并输出到csv和txt文件(shanghaiTech数据集)

    关于shanghaiTech的介绍,可以看我之前的写的博客(https://blog.csdn.net/johnhamtom/article/details/104481186?spm=1001.2014.3001.5501)
    这里采用的文件结构如下图所示,其中images存放图片,ground_truth存放对应的标注文件:
在这里插入图片描述
    参考CSRNet的官方源码(https://github.com/leeyeehoo/CSRNet-pytorch)中的make_dataset.py可以得知,读取mat标注文件并获取其点坐标的代码如下:

mat = io.loadmat(img_path.replace('.jpg','.mat').replace('images','ground_truth').replace('IMG_','GT_IMG_'))
gt = mat["image_info"][0,0][0,0][0] #gt为用列表存储的点坐标对

    知道如何获取mat文件的点坐标后,直接批量读取mat文件,并在读取的时候记录关键点数量和图片名称即可,一些说明写在了注释中,代码如下:

import scipy.io as io
import glob
from image import *
import pandas as pd


# 设置根目录地址
root = r'.\Shanghai'
# 根据根目录地址合成图片地址
part_A_train = os.path.join(root, 'part_A_final', 'train_data', 'train_data', 'images')
part_A_val = os.path.join(root, 'part_A_final', 'train_data', 'val_data', 'images')
part_A_test = os.path.join(root, 'part_A_final', 'test_data', 'images')

part_B_train = os.path.join(root, 'part_B_final', 'train_data', 'train_data', 'images')
part_B_val = os.path.join(root, 'part_B_final', 'train_data', 'val_data', 'images')
part_B_test = os.path.join(root, 'part_B_final', 'test_data', 'images')

path_sets = [part_A_train, part_A_val, part_A_test, part_B_train, part_B_val, part_B_test]
save_path = ['part_A_train', 'part_A_val', 'part_A_test', 'part_B_train', 'part_B_val', 'part_B_test']

index_path_sets = 0

for name in save_path:
    # 读取图片路径
    img_paths = []
    for img_path in glob.glob(os.path.join(path_sets[index_path_sets], '*.jpg')):
        img_paths.append(img_path)

    index_path_sets = index_path_sets + 1

    df = pd.DataFrame(columns=['ImgName', 'Num'])  # 将标注框数量储存在CSV中

    #文件名
    filename = name +"_num"

    i=0

    with open(r".\Shanghai\annotations/" + filename + ".txt" , "w") as f:
        for img_path in img_paths:
            mat = io.loadmat(img_path.replace('.jpg','.mat').replace('images','ground_truth').replace('IMG_','GT_IMG_'))
            gt = mat["image_info"][0, 0][0, 0][0]
            # len(gt) 即为标注点数量
            # os.path.basename(img_path) 提取出图片文件名
            new = [os.path.basename(img_path), len(gt)]
            df.loc[i] = new
            print(new)
            i=i+1
            f.write(os.path.basename(img_path) + " " + str(len(gt)))
            f.write("\n")

    df.to_csv(r".\Shanghai\annotations/" + filename + ".csv", index=False)  # CSV文件路径

    结果如下所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: CSV(逗号分隔值)数据文件是一种基于文本的数据格式。CSV文件通常用于在各种应用程序之间交换数据。由于CSV文件具有易于阅读和编辑的优点,因此在数据分析和处理过程得到了广泛应用。 但是,当处理大量数据时,使用CSV文件可能会导致处理效率低下。因此,一种更好的选择是将CSV数据文件转换为MAT文件MAT文件是一种二进制文件格式,由MATLAB软件开发的,可以存储数学操作和数据分析的计算结果和数据。MAT文件的元素可以通过MATLAB工作区、命令窗口或脚本进行处理和访问。MAT文件还可以容纳更大的数据集,因为二进制文件格式比文本文件格式节省空间。 使用MATLAB工具箱可以将CSV文件转换为MAT文件。一旦转换完成,MAT文件的数据就可以使用MATLAB的强大功能进行分析。在MATLAB,可以执行许多高级数据分析方法,如各种统计分析、矩阵操作、数据可视化等。此外,MATLAB还允许用户使用自己的算法进行开发,然后将数据文件交换为MAT格式以供其他人使用。 综上所述,将CSV数据文件存储为MAT文件是一种方便、高效、灵活的数据处理方式,可以提高数据处理和分析的效率和准确性。 ### 回答2: CSV数据文件是指以逗号分隔的文本文件,还可以用其他字符作为分隔符。这种文件可以用文本编辑器打开,结构简单,易于理解和编辑。但是CSV数据文件的格式不够灵活,不能保存一些复杂的数据结构,例如数值矩阵、结构体等。 MAT文件是一种二进制数据文件,用于存储数值数组、结构体、函数变量等MATLAB数据类型。它比CSV文件格式更灵活,可以存储大量的数据,并且可以保存多个变量。MAT文件的格式由MathWorks公司开发,可以自定义文件名和文件后缀名。 将CSV文件存为MAT文件的好处是可以方便地在MATLAB读取和处理数据。MATLAB提供了load命令,可以直接读取MAT文件的变量。我们可以将CSV数据文件导入MATLAB,将其转换成MATLAB数据类型,然后将其存储为MAT文件,这样以后就可以使用load命令方便地读取数据了。此外,MATLAB还提供了保存MAT文件的命令save,可以将MATLAB的变量保存为MAT文件。 在存储CSV数据文件MAT文件时,需要注意一些问题。首先,要保证CSV文件的数据格式正确,例如数值数据不能含有非数字字符。其次,要注意MAT文件的大小,MATLAB存在内存限制,如果存储的数据量很大,需要考虑分块读取和存储。最后,由于MAT文件是二进制文件,不易编辑和读取,一旦存储需谨慎选择文件名和存储路径。 综上所述,将CSV数据文件存为MAT文件可以方便地在MATLAB读取和处理数据,提高数据处理的效率和准确性。 ### 回答3: CSV数据文件MAT文件是数据存储和传输经常使用的两种格式。CSV文件是一种文本文件格式,用逗号或其他分隔符区分不同字段,并且每行记录都包含相同的字段数。MAT文件是一种二进制文件格式,可以存储包含多个变量的数据,每个变量可以是不同类型和大小的数组。 将CSV数据文件存储为MAT文件的主要原因是MAT文件可以更快地读取和处理大型数据集。由于CSV文件是文本格式,因此读取和解析大型CSV文件需要消耗大量的计算资源和时间。另一方面,MAT文件包含二进制数据,可以直接读取到内存进行处理,速度更快。 此外,MAT文件还可以保存多个变量和元数据,因此它们更适合存储和传输复杂的数据结构和实验结果。MAT文件可以使用MATLAB和其他支持MAT格式的工具进行读取和处理。这种格式的文件非常适合存储多种类型的数据,包括数字、图像和音频等。 然而,将CSV文件转换为MAT文件并不意味着MAT文件是完美的。MAT文件只能被MATLAB和其他支持MAT格式的工具读取,而不是许多其他通用数据分析软件。此外,将数据转换为MAT文件可能会占用更多的磁盘空间,因为MAT文件是二进制格式,而不是文本格式。 总之,将CSV数据文件转换为MAT文件可以提高数据读取和处理的速度,并存储更复杂的数据结构和元数据。但是,这种格式的文件可能只能在支持MAT格式的工具使用,并且可能占用更多的磁盘空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

johnhamtom

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值