[英]Display normal vectors with open3d.visualization.O3DVisualizer
我正在使用令人惊叹的 open3d Python 库来可视化一些点云。 我已经知道这些点的法线向量,我直接归因如下:
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(points)
pcd.normals = o3d.utility.Vector3dVector(normals)
我还设置了一个可视化器,我在其中插入这些点,如下所示:
app = gui.Application.instance
app.initialize()
vis = o3d.visualization.O3DVisualizer("Open3D - 3D Text", 1024, 768)
vis.show_settings = True
vis.add_geometry("my points", pcd)
with o3d.utility.VerbosityContextManager(o3d.utility.VerbosityLevel.Debug) as cm:
'''visualize'''
vis.reset_camera_to_default()
app.add_window(vis)
app.run()
到目前为止,所有这些都按预期运行,但是我无法以使我能够可视化法线向量的方式设置可视化器。 显然 o3d.visualization.Visualizer() 有这个方法 get_render_option() 据说“检索一个 RenderOption”object,在这个 RenderOption object 中有一个 point_show_normal 属性,但我不能让我的代码(比最小的例子更复杂上面)使用 o3d.visualization.Visualizer():我不知道如何使用这个 o3d.visualization.Visualizer().get_render_option().point_show_normal。
有没有办法用 open3d.visualization.O3DVisualizer 显示法线向量?
到目前为止我还没有找到解决方案,所以我求助于在另一个窗口中查看我的法线向量,使用 mayavi 库而不是 open3D 库生成。 为此,我使用了这个简单的代码片段:
from mayavi.mlab import *
P = [my list of 3D points]
N = [my list of normal vectors]
x = P[:, 0]
y = P[:, 1]
z = P[:, 2]
points3d(x, y, z, color=(0, 1, 0), scale_factor=0.5)
u = N[:, 0]
v = N[:, 1]
w = N[:, 2]
quiver3d(x, y, z, u, v, w)
show()
它按预期工作。 理想情况下,我希望法向量与图的其余部分一起显示,但这满足了我的迫切需求。
我认为这是一种解决方法,而不是最终的解决方案,因此如果遇到问题的其他人发现它有用,我将其放在这里作为答案。 但我的问题仍然没有解决。
您需要在代码中添加两行,获取渲染并将point_show_normal设置为 True:
opt = vis.get_render_option()
opt.point_show_normal = True
您可以在文档中查看open3D教程和 python 示例
我希望它有帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.