boundary_points.points = o3d.utility.Vector3dVector(np.asarray(inlier_cloud.compute_convex_hull())) RuntimeError: Unable to cast Python instance to C++ type (compile in debug mode for details)
时间: 2024-03-14 09:46:17 浏览: 142
出现这个错误可能是因为 `compute_convex_hull()` 函数返回的点云类型与 `boundary_points` 类型不一致导致的。可以将 `inlier_cloud` 转换成 `o3d.geometry.TriangleMesh` 类型再进行凸包计算,然后将凸包的顶点转换成点云类型赋值给 `boundary_points`。
以下是修改后的代码:
```python
import open3d as o3d
import numpy as np
# 读取点云数据
pcd = o3d.io.read_point_cloud("your_point_cloud.pcd")
# 提取平面点云
plane_model, inliers = pcd.segment_plane(distance_threshold=0.01,
ransac_n=3,
num_iterations=1000)
inlier_cloud = pcd.select_by_index(inliers)
inlier_cloud.paint_uniform_color([1.0, 0, 0])
# 提取平面点云的边界点
inlier_mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_alpha_shape(inlier_cloud, alpha=0.1)
boundary_points = inlier_mesh.vertices
boundary_points.paint_uniform_color([0, 1.0, 0])
# 可视化
o3d.visualization.draw_geometries([inlier_cloud, boundary_points])
```
在上面的代码中,首先将 `inlier_cloud` 转换成 `TriangleMesh` 类型,然后使用 `vertices` 属性获取凸包三角形的顶点,并将其赋值给 `boundary_points`。其他部分的逻辑与之前的回答一致。
阅读全文