AttributeError: 'open3d.cpu.pybind.geometry.PointCloud' object has no attribute 'get_center_points'出现了这个错误,你能换一种写法吗?
时间: 2023-12-13 15:04:56 浏览: 133
当使用 Open3D 中的 `open3d.geometry.PointCloud` 对象时,确实没有 `get_center_points` 方法。为了解决这个问题,可以使用以下代码来随机选择每个体素方格中的一个点作为代表点:
```python
import open3d as o3d
import random
# 读取点云数据
point_cloud = o3d.io.read_point_cloud("point_cloud.pcd")
# 创建Voxel Grid下采样器
voxel_size = 0.1 # 设置立方体格子的大小
downpcd = point_cloud.voxel_down_sample(voxel_size)
# 在每个体素方格中随机选择一个点作为代表点
downsampled_points = []
for voxel_index in range(len(downpcd.voxels)):
voxel_points = [point_cloud.points[i] for i in downpcd.voxels[voxel_index].indices]
if voxel_points:
downsampled_points.append(random.choice(voxel_points))
# 创建新的下采样点云
downsampled_pcd = o3d.geometry.PointCloud()
downsampled_pcd.points = o3d.utility.Vector3dVector(downsampled_points)
# 保存下采样后的点云文件
o3d.io.write_point_cloud("downsampled_point_cloud.pcd", downsampled_pcd)
# 可视化结果
o3d.visualization.draw_geometries([downsampled_pcd])
```
在这段代码中,我们通过索引访问 `downpcd.voxels` 来获取每个体素方格的索引,然后根据索引获取对应的点云数据。最后,我们使用 `random.choice` 函数从 `voxel_points` 中随机选择一个点作为代表点。通过这种方式,可以实现在每个体素方格中随机选择一个点作为代表点的下采样操作。
阅读全文