使用CloudCompare标注点云&修改点云标签

本文介绍了如何使用CloudCompare进行点云标注,包括载入点云、使用剪刀工具进行区域选择、保存和修改点云标签。在修改标签部分,由于软件限制,建议使用脚本处理。文章还提到了软件的一些不便之处,如颜色分配和中文路径问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

        本博文按照下面的顺序介绍如何使用CloudCompare进行标注以及修改点云标签,还会介绍在使用CC进行标注时会遇到的几个坑,适合刚入门点云分割,想要给自己数据集进行标注的同志们。

1.CloudCompare下载

2.点云标注

2.1 载入点云

2.2 标注点云

2.3 保存点云

2.4 修改点云标签

 3.其他

1.CloudCompare下载

        下载地址:直接在下面链接下载安装就行了,非常方便,简单快捷。CloudCompare - Open Source projecticon-default.png?t=N7T8https://www.cloudcompare.org/

2.点云标注

        我这里就随便以ShapeNet数据集中一个点云进行标注作为例子了。直接

2.1 载入点云

        可以通过直接拖拽的方式或者File-Open打开点云图。

2.2 标注点云

       第一,点击打开的点云(有点看不清楚,其实这是一架飞机),直到显示出黄色的框,然后在工具栏中选择“剪刀”形状的功能按钮,如下所示:

         第二,点击“剪刀”按钮后,调整到合适的角度,使用鼠标左键开始描点,最后选择鼠标右键确认所选的区域,如下所示:

        第三,点击右上角实心的“五边形”按钮,最后点击确认,可完成该区域的选择,如下所示。

         第四,给第3点中选中的点云添加标签,注意要先选中刚分割出来的点云,再点击“+”按钮,添加标签,如下所示。

         第五,第一个设置,SF name默认为Constant就好了,第二个Value设置为对应的标签序号就行了,比如这里的标签1表示机翼,标签0则表示机头,标注方法都是一样的。

         这里再演示标注第二个机翼,因为会存在一个坑,如下所示:简单来说,就是每次进行标注的时候,要注意选对点云就好,不然会提示[ccGenericPointCloud::getTheVisiblePoints] No point in selection.错误,经历过的人自然知道我在说什么,刚开始标注的时候被这个错误搞了好久。

        第六,把刚刚标注好的点云进行合并,如下所示

         这里介绍一下第二个坑,合并的时候要注意选择No。

2.3 保存点云

        保存点云很简单,按照如下步骤走就行,可以保存的类型很多,比如txt,pcd,bin等点云格式,我这里演示保存为txt格式的点云,一直默认就行。

        打开保存后的.txt格式点云 ,可以看到其结构为n行4列,每一列分别代表每一个点的x,y,z坐标以及标签类别,如下所示。

2.4 修改点云标签

        其实CloudCompare这个软件对于修改标签的操作是不太友好的,在查阅了很多博客后都没有得到比较好的方法,既然该软件不太完美只能在修改后使用脚本对标签进行处理了,下面以增加一个类别为例,说明如何修改标签。

        第一,在已经标注好的点云上增加一个类别,操作流程和正常给点云打标签一样(2.2的步骤)。

         第二,分割好并且打上标签后,同样的,要将点云进行合并,如下所示。

         第三,将合并后保存的.txt文件打开,发现原本只有4列的标签,现在变成了5列,并且第5列还有nan值,这是什么情况呢?其实很简单,多出来的第5列,就是刚才修改过的点,3表示该点修改后变成3(该点原本的标签是0),而nan值是没有修改的点的标签,既然如此,我就用后一列的标签去覆盖前一列的标签,从而实现更新坐标。

         第四,代码如下,只对单个点云文件进行处理,也可以写成对文件夹的处理。

import numpy as np

#用软件修改后保存的.txt文件,有5列值
before_file=r"./before.txt"
#用代码修改后保存的.txt路径,有4列值
after_file=r"./after.txt"

points=np.loadtxt(before_file)

for i in range(1,points.shape[1]-3):
     # 找到最后一列不为NaN的值的索引
     valid_indices = ~np.isnan(points[:, -i])
     # 将最后一列不为NaN的值赋值给倒数第二列对应位置的值
     points[valid_indices, -(i+1)] = points[valid_indices, -i]

np.savetxt(after_file, points[:,:4],fmt='%.8f')

        修改后,可以对比一下本节3中的点,已经实现了更新,如下所示。

         在CloudCompare中可视化可以看到机头的部分已经显示出不同的颜色了,如下所示。

 3.其他

        最后想谈一谈这个软件在标注时候遇到的其他问题,比如,在对有标签的点云文件进行可视化的时候,不是根据标签的值来决定点的颜色的,比如当点云只有2,4标签时,2是红色,4是绿色,而当点云只有1,2标签时,1是红色,2是绿色,CC是按照已有标签的大小来给点赋颜色的,这一点感觉挺不方便的。

        还有一点就是不能导入有中文路径的点云,这一点没什么好说的,大家注意一下就行。

        如果各位大佬在使用该软件时还有什么值得推荐的操作或者对博文有什么指正的地方,欢迎在底下评论,向大家学习。

### Kitti 数据集点云标签格式及说明 #### 点云数据存储结构 点云数据采用浮点二进制文件格式保存,每个浮点数值占用4字节空间。每组完整的点云记录由四个连续的浮点数组成,依次代表该点在三维坐标系中的位置(x, y, z)以及反射强度(r)[^2]。 #### 文件路径与命名规则 对于Kitti数据集而言,所有的标签信息被存放在`data_object_label_2`目录下的文本文件中,具体路径为`data_object_label_2/training/label_2/xxxxxx.txt`。这里只包含了用于训练目的7481个场景对应的标注详情;至于测试阶段,则未提供相应的标记资料[^1]。 #### 类别定义 根据官方文档,在这些`.txt`文件里每一行描述了一个物体实例的信息,其中第一列指定了目标所属类别名称,可能取值包括但不限于'Car', 'Van', 'Truck','Pedestrian', 'Person_sitting', 'Cyclist', 'Tram','Misc' 或者'DontCare'[^3]。值得注意的是,“DontCare”的存在意味着某些情况下虽然图像处理算法能够识别到对象的存在,但由于距离过远等原因无法获得精确的空间定位参数,因此这部分数据不会参与到后续的任务评估当中去。 ```python # Python读取单帧点云数据示例代码 import numpy as np def read_point_cloud(file_path): """ 从给定路径加载并返回点云数据作为numpy array. 参数: file_path (str): .bin格式的点云文件绝对路径 返回: points (np.ndarray): shape=(N, 4), N表示点的数量, 列分别为[x,y,z,r], 即各维度坐标加上反射率 """ scan = np.fromfile(file_path, dtype=np.float32) points = scan.reshape((-1, 4)) return points ```
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吃鱼不卡次

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值