SemanticKITTI语义标签 C++读取

        SemanticKITTI是一个基于KITTI数据集的扩展版本,其中提供了大规模3D点云数据的语义标签。在SemanticKITTI中,点云标签通常保存在单独的文件中,文件名与对应的点云数据文件相对应。在标签文件中,每行表示一个点云数据的语义标签这些标签表示了每个点所属的对象类别,例如汽车、建筑、人、道路等

SemanticKITTI数据集为每个语义类别都分配了一个独特的整数标签。在SemanticKITTI数据集中,每个点云点的标签都以32位无符号整数(uint32_t)的形式存储。文件中的标签顺序和点云数据中的点的顺序是相匹配的,也就是说,文件中的第一个标签对应于点云数据中的第一个点,文件中的第二个标签对应于点云数据中的第二个点,以此类推。这个标签可以分成两部分来看待:

  • 0xFFFFFF00 部分是实例标签,用于标记物体的实例,如两辆不同的汽车,即使它们都属于"汽车"这一语义类别,它们的实例标签也会不同。实例标签可以用于区分同一语义类别中的不同物体。

  • 0x000000FF 部分是语义标签,用于标记点云点的语义类别,如汽车、行人、道路等。语义标签用于描述点云点的物理意义。

读取lable的代码如下:

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>  // 引入算法库,提供 std::max_element

// 使用 uint32_t 来存储语义标签
typedef uint32_t LabelType;

std::vector<LabelType> readSemanticKittiLabelFile(const std::string& filename) {
    std::vector<LabelType> labels;

    std::ifstream file(filename, std::ios::binary);
    if (file.is_open()) {
        LabelType label;
        while (file.read(reinterpret_cast<char*>(&label), sizeof(LabelType))) {
            labels.push_back(label);
        }

        if (file.bad()) {
            std::cerr << "Error occurred while reading the file." << std::endl;
        }

        file.close();
    } else {
        std::cerr << "Unable to open file " << filename << std::endl;
    }

    return labels;
}

int main() {
    const std::string filename = "/home/fairlee/dataset/KITTI/sequences_kitti_00_21/00/labels/000000.label";
    std::vector<LabelType> labels = readSemanticKittiLabelFile(filename);

    // 打印读取到的标签数量
    std::cout << "Number of labels: " << labels.size() << std::endl;

    // 打印第一个标签,用于验证是否正确读取
    if (!labels.empty()) {
        std::cout << "First label (semantic part): " << (labels[0] & 0xFF) << std::endl;
        std::cout << "First label (instance part): " << (labels[0] >> 8) << std::endl;
    }

    // 找出并打印最大的标签
    if (!labels.empty()) {
        LabelType max_label = *std::max_element(labels.begin(), labels.end());
        std::cout << "Maximum label (semantic part): " << (max_label & 0xFF) << std::endl;
        std::cout << "Maximum label (instance part): " << (max_label >> 8) << std::endl;
    }

    return 0;
}

        数据集下载
        所有数据集直接可以在semantickitti数据集官网

SemanticKITTI - A Dataset for LiDAR-based Semantic Scene Understanding下载。
        依次点击Dataset->Download即可看到下载链接。
        三个连接均需要下载(占得空间很大,建议放在硬盘),分别解压到当前文件夹。

文件夹组织结构

dataset
        sequences
                00
                        labels
                        velodyne
                        calib.txt
                        poses.txt
                        times.txt
                01
                        labels
                        velodyne
                        calib.txt
                        poses.txt
                        times.txt
               …

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值