1. 文章信息2. Open3D 库简介2. 3D 可视化使用
2.1 单帧点云2.2 多帧点云
1. 文章信息(1)标题:Open3D: A Modern Library for 3D Data Processing (2018)
(2)文章链接:https://arxiv.org/pdf/1801.09847.pdf
(3)Open3D 库网址:http://www.open3d.org/
2. Open3D 库简介Open3D 是一个开源库,支持快速开发处理 3D 数据的软件。Open3D 前端在 C++ 和 Python 中公开了一组精心选择的数据结构和算法。后端经过高度优化,并设置为并行化。Open3D 是从一块干净的石板上开发出来的,有一个小的、经过仔细考虑的依赖项集。它可以在不同的平台上设置,并从源代码进行编译,只需很少的工作量。代码干净、样式一致,并通过清晰的代码审查机制进行维护。Open3D已经在许多已发表的研究项目中使用,并积极部署在云端。我们欢迎开源社区的贡献。核心特性如下:
Simple installation via conda and pip3D data structures3D data processing algorithmsScene reconstructionSurface alignmentPBR rendering3D visualizationPython binding
安装方法
conda install open3d 或者 pip install open3d2. 3D 可视化使用 2.1 单帧点云
import numpy as np
import open3d as o3d
colormap = np.array([[150, 150, 150],
[255, 0, 255],
[0, 255, 0],
[0, 200, 255],
[255, 255, 0]]) / 255.0
path = '/home/hjw/PointCloudTest/PointCloudTestData.npy' # 本人自己的测试数据,直接替换即可
pointCloud = np.load(path).astype(np.float32, copy=False)
point3D = pointCloud[:, :3] # x, y, z
pointIntensity = pointCloud[:, 3] # intensity
pointColor = [colormap[int(pointIntensity[i]) % colormap.shape[0]] for i in range(pointIntensity.shape[0])]
pcd = o3d.geometry.PointCloud() # 传入3d点云
pcd.points = o3d.utility.Vector3dVector(point3D) # point3D 二维 numpy 矩阵,将其转换为 open3d 点云格式
pcd.colors = o3d.utility.Vector3dVector(pointColor) # 根据 intensity 和 colormap 着色
vis = o3d.visualization.Visualizer()
vis.create_window(width=800, height=600) # 创建窗口
render_option = vis.get_render_option() # 渲染配置
render_option.background_color = np.array([0, 0, 0]) # 设置点云渲染参数,背景颜色
render_option.point_size = 1.0 # 设置渲染点的大小
vis.add_geometry(pcd) # 添加点云
view_control = vis.get_view_control() # 视角配置
# view_control.change_field_of_view(step=30)
# view_control.rotate(90.0, 10.0)
# view_control.set_front([0, 1, 0.5])
# view_control.set_lookat([1, 0, 0])
# view_control.set_up([0, -1, 0])
# view_control.translate(-50, -100)
view_control.set_zoom(0.2)
vis.run()
vis.destroy_window()
2.2 多帧点云详细参数介绍见 API 网址:http://www.open3d.org/docs/release/python_api/open3d.visualization.ViewControl.html
import os
import numpy as np
import open3d as o3d
path = '/home/hjw/PointCloudTest/' # 本人自己的测试数据路径,直接替换即可
files = os.listdir(path)
vis = o3d.visualization.Visualizer()
vis.create_window()
pcd = o3d.geometry.PointCloud()
toReset = True
vis.add_geometry(pointcloud)
for f in files:
pointCloud = np.load(path + f).astype(np.float32, copy=False)
point3D = pointCloud[:, :3] # x, y, z
pointIntensity = pointCloud[:, 3] # intensity
pcd.points = o3d.utility.Vector3dVector(point3D)
vis.update_geometry(pcd)
if toReset:
vis.reset_view_point(True)
toReset = False
vis.poll_events()
vis.update_renderer()



