我正在Windows上使用open3d for python3。它是通过 pip 通过'pip install open3d-python'
安装的。我已经检查了文档,我的脚本似乎一切正常,它尝试将点云文件 (.ply( 转换为网格 (.stl(。但是,在执行时,我得到了一个attribute error: 'open3d.open3d.geometry.PointCloud' has no attribute 'estimate_normals'
.任何帮助将不胜感激。 谢谢
这是我的脚本
import open3d as o3d
import trimesh
import numpy as np
pcd = o3d.io.read_point_cloud("pointcloud.ply")
pcd.estimate_normals()
#pcd = pcd2.normals
# estimate radius for rolling ball
distances = pcd.compute_nearest_neighbor_distance()
avg_dist = np.mean(distances)
radius = 1.5 * avg_dist
mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_ball_pivoting(pcd,o3d.utility.DoubleVector([radius, radius * 2]))
trimesh = trimesh.Trimesh(np.asarray(mesh.vertices), np.asarray(mesh.triangles),vertex_normals=np.asarray(mesh.vertex_normals))
trimesh.export('stuff.stl')
编辑
我在某处读到从源代码编译原始包可以解决问题,但我是 mac 用户,并且正在尝试在 Windows 上执行此操作,所以我无法弄清楚如何做到这一点。 这是包 https://github.com/intel-isl/Open3D 的 GitHub 链接
我遇到了同样的问题,发现问题是由于通过pip install open3d-python
安装的错误版本的open3d而发生的。对我来说,这很v0.6.0
. 该文档基于新版本。从版本v0.8.0
开始,open3d 应作为 conda 的pip install open3d
或conda install -c open3d-admin open3d
安装。在发布中找到该信息。它解决了我Mac上的问题。
这对我有用:
- 卸载作为
open3d
安装的不同版本的 open3d 并open3d-python
:pip uninstall open3d open3d-python
- 安装
open3d 0.8
:pip install open3d==0.8.0.0
- 计算表面法线:
pcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30))
- 当显示窗口打开以查看法线:
o3d.visualization.draw_geometries([pcd])
时,按n
来可视化曲面法线