python利用open3d可视化npy文件

本文介绍了如何使用open3d库将PCD点云数据从npy格式转换为txt,以便于可视化,并处理RGB值范围,以适应深度学习模型的输入需求。关键步骤包括数据加载、维度调整和颜色归一化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1.可视化代码

#coding=utf-8
import open3d as o3d
import numpy as np
np.set_printoptions(suppress=True) # 取消默认科学计数法,open3d无法读取科学计数法表示
data = np.load('./Area_1_conferenceRoom_1.npy')
b = np.array([1 , 1, 1,255, 255, 255]) # 每一列要除的数
np.savetxt('./scene.txt', data[:,:6]/b)
# 读取点云并可视化
pcd =o3d.io.read_point_cloud('./scene.txt', format='xyzrgb') # 原npy文件中的数据正好是按x y z r g b进行排列
print(pcd)
o3d.visualization.draw_geometries([pcd], width=1200, height=600)

2.代码分析

  • 加载数据

    data = np.load('./Area_1_conferenceRoom_1.npy') 
    

    这时候的数据大小要分清,一般是n * 6,这里的6维分别指的XYZRGB;
    但是我的S3dis数据集是n * 7,最后一位是标签,所以需要把最后一维去掉。

  • 维度减少

    np.savetxt('./scene.txt', data[:,:6]/b)
    
  • rgb范围减少
    原数据中rgb值的范围为0-255,而open3d需要调整为0-1。所以需要数组中指定列除以一个255,即将最后3列除以255,最后保存为txt文件

    b = np.array([1 , 1, 1,255, 255, 255]) # 每一列要除的数
    np.savetxt('./scene.txt', data[:,:6]/b)
    

    如果不进行减少的话,可能会报错:[Open3D WARNING] [ViewControl] SetViewPoint() failed because window height and width are not set.

3.可视化txt文件

因为npy文件,无法直接可视化,所以需要转换成txt文件,最后再利用open3d可视化。
在这里插入图片描述

# 读取点云并可视化
pcd =o3d.io.read_point_cloud('point_cloud/scene.txt'format='xyzrgb') # 原npy文件中的数据正好是按x y z r g b进行排列
print(pcd)
o3d.visualization.draw_geometries([pcd], width=1200, height=600)

在这里插入图片描述

参考链接:https://blog.youkuaiyun.com/zyoung17/article/details/106963253/

### 使用 Python可视化 npy 文件中的点云数据 为了实现这一目标,可以采用 `numpy` 加载 `.npy` 文件,并借助 `matplotlib` 或者更专业的三维点云处理库 `Open3D` 来完成点云数据的可视化。 #### 方法一:使用 Matplotlib 可视化 Matplotlib 虽然主要用于二维绘图,但也提供了基本的支持来绘制简单的三维图形。对于点云来说,这可能意味着只适用于较小规模的数据集或是初步查看数据分布情况。 ```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # Load point cloud data from .npy file using NumPy point_cloud_data = np.load('path_to_your_file.npy') fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(point_cloud_data[:, 0], point_cloud_data[:, 1], point_cloud_data[:, 2]) plt.show() ``` 这种方法简单易懂,但对于复杂场景下的交互式探索则显得力不从心[^1]。 #### 方法二:使用 Open3D 进行高级可视化 相比之下,Open3D 提供了更为强大和灵活的功能用于处理以及渲染大规模点云数据。它不仅支持多种格式输入输出,还内置了许多实用工具帮助分析与编辑这些数据。 ```python import open3d as o3d import numpy as np # Loading the point cloud directly into an Open3D object pcd = o3d.io.read_point_cloud("path_to_your_file.npy", format='xyz') o3d.visualization.draw_geometries([pcd]) ``` 需要注意的是,在某些情况下,`.npy` 文件内的结构未必直接兼容于上述加载方式;此时应当先通过 `np.load()` 函数读取后再转换成适合的形式传递给 Open3D 的接口函数[^2]。 如果遇到这种情况,则需调整代码如下: ```python import open3d as o3d import numpy as np data = np.load('path_to_your_file.npy') pcd = o3d.geometry.PointCloud() pcd.points = o3d.utility.Vector3dVector(data) o3d.visualization.draw_geometries([pcd]) ``` 此方法能够更好地适应不同类型的点云数据源,并提供更加丰富的视觉效果选项[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Studying_swz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值