点云可视化
pip3 install open3d-python
定位和pose
连续多帧显示点云,需要 点云文件 和 定位信息(IMU惯导信息)
时间对齐
空间对齐
时间对齐:就是说我们哪一个时间下录制的pcd要和对应时间下旋转矩阵相乘(用的只是他们的差值小于0.01,就认为是匹配的)
空间对齐:1.看看静态物体(比如杆子)有没有对齐
2.看看地面有没有变厚
细节:
pcd
pose: 自车转世界坐标系 的4×4的矩阵
参考的转换方式
验证转换的情况的方式
01.根据提供的自车坐标系的pcd和pose 转到世界坐标系pcd
02.根据世界坐标系的pcd可视化
验证转换的情况的方式
01.根据提供的自车坐标系的pcd和pose 转到世界坐标系pcd
02.世界坐标系的pcd根据某一帧的pose进行转换
03.可视化转换后的pcd
可视化代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import os
import open3d as o3d
import numpy as np
def vis_pcds(pcd_files):
pcds = []
pcds_p = []
files = os.listdir(pcd_files)
for f in files:
pcd_path = os.path.join(pcd_files,f)
pcds_p.append(pcd_path)
pcd = o3d.io.read_point_cloud(pcd_path)
# 降采样
pcd_dow = pcd.voxel_down_sample(voxel_size=0.2)
pcds.append(pcd_dow)
for i,pcd_element in enumerate(pcds_p):
if i == 0:
pcd_base = o3d.io.read_point_cloud(pcd_element)
o3d.io.write_point_cloud("pcd_20_20.pcd",pcd_base)
else:
pcd_base = o3d.io.read_point_cloud("pcd_20_20.pcd")
pcd_mid = pcd_base + o3d.io.read_point_cloud(pcd_element)
o3d.io.write_point_cloud("pcd_20_20.pcd",pcd_mid)
pcd_last = o3d.io.read_point_cloud("pcd_20_20.pcd")
o3d.visualization.draw_geometries([pcd_last], window_name="拼接20个点云",
width=1024, height=768,
left=50, top=50,
mesh_show_back_face=False)
if __name__ == '__main__':
exp_pcd_file=r""
vis_pcds(exp_pcd_file)
代码说明
# 以下代码实现了与以下相同的效果:
# o3d.visualization.draw_geometries([pcd]) geometry_list (List[open3d.geometry.Geometry]) – 待显示的pcd点云格式列表
def custom_draw_geometry(pcd):
vis = o3d.visualization.Visualizer()
vis.create_window()
vis.add_geometry(pcd)
vis.run()
vis.destroy_window()
# 创建一个PointCloud对象 pcd = o3d.geometry.PointCloud()
参考
Python: 用open3D库,连续多帧显示点云 https://blog.csdn.net/melally/article/details/126116894
http://www.open3d.org/docs/release/
标签:20,point,点云叠,vis,open3d,cloud,ROS,o3d,pcd
From: https://www.cnblogs.com/ytwang/p/16723459.html