Open3D处理点云数据(一)点云文件读取、写入、显示

本文介绍了如何使用Python的Open3D库进行点云数据的处理和可视化。详细讲解了从CSV文件中读取点云数据的方法,包括处理带表头和不带表头的CSV文件,并演示了如何将这些数据转换为Open3D可以处理的形式,最终实现点云的可视化。
import open3d as o3d
import numpy as np


pcd = o3d.geometry.PointCloud()    # pcd类型的数据。
np_points = np.random.rand(100, 3)    # 随机生成点云
# print(np_points.shape)
# pcd = o3d.io.read_point_cloud("1.csv")

# 将点云转换成open3d中的数据形式并用pcd来保存,以方便用open3d处理
pcd.points = o3d.utility.Vector3dVector(np_points)

# 将点云从oepn3d形式转换为矩阵形式
np_points = np.asarray(pcd.points)

# 用open3d可视化生成的点云
o3d.visualization.draw_geometries([pcd])


import numpy as np
import open3d as o3d
np.set_printoptions(suppress=True) # 取消默认的科学计数法
Data1 = np.loadtxt('./0.csv',dtype=np.float,skiprows=1,
                   delimiter=',',usecols=(0,1,2),unpack=False)

有些Csv文件带表头:

skiprows是指跳过的行数,我这里设为1,因为我的数据第一行是表头。

delimiter=','表示数据的分隔符是逗号。

usecols=(0,1,2)表示使用第0、1、2列数据,这里结合表的具体内容,表数据的三维坐标是第0、1、2列数据;

unpack=False表示不把每一列当成一个向量输出,也就是一行数据就是一个向量,如果等于True就是一列数据是一个向量。数据是三维坐标,一行为一个向量。

Csv不带表头的:直接用Pandas读取。

import numpy as np
import pandas as pd
import open3d as o3d


pcd = o3d.geometry.PointCloud()    # pcd类型的数据。

with open("test(2).csv", encoding="utf-8") as f:
    data = pd.read_csv(f, header=None).values.tolist()
    print(data[:5])
    np_points = np.array(data)[:, 1:4]
    print(np_points.shape)
    pcd.points = o3d.utility.Vector3dVector(np_points)
    o3d.visualization.draw_geometries([pcd])
    # o3d.io.write_point_cloud('E:/project/3.ply', pcd)

拆分与拼接

import numpy as np
import pandas as pd
import open3d as o3d


pcd = o3d.geometry.PointCloud()    # pcd类型的数据。

with open("0.csv", encoding="utf-8") as f:
    data = pd.read_csv(f, header=None).values.tolist()
    # print(data[:5])

    np_points = np.array(data)
    # np_points = np.array(data)[:, 1:4]
    # print(np_points)
    print(np_points.shape)
    X = np_points[:, 1]
    print(type(X))
    Y = np_points[:, 2]
    Z = np_points[:, 3]
    # print(X)
    # print(Y)
    # print(Z)
    m3d = np.array([X, Y, Z]).T    # 特别注意此行。
    pcd.points = o3d.utility.Vector3dVector(m3d)
    o3d.visualization.draw_geometries([pcd])

这个主要针对我们从其他地方读取到X,Y,Z分量的合并,以及如何将X,Y,Z拆解。


在Open3D打开显示时:可以通过【Ctrl + +】来放大点。【Ctrl +--】来缩小点。鼠标滚轮来将整体放大缩小。

### 回答1: o3d.utility.vector3dvectorOpen3D库中的个类,用于表示三维向量的容器。它可以存储多个三维向量,并提供了些方便的方法来操作这些向量,例如计算向量的长度、点积、叉积等。 ### 回答2: o3d.utility.vector3dvectorOpen3D Python 库中的个类,它是用于向量计算的工具类。Vector3dVector个包含了许多向量的数组,这些向量的维度均为三维。 在 3D 计算中,向量常常用于描述物体的位置、方向、速度、加速度等信息。Vector3dVector 可以帮助我们对这些信息进行计算和处理Vector3dVector 类封装了系列向量运算的方法,例如向量加减、点积、叉积等。这些方法可以帮助我们更方便地处理向量相关的计算。 另外,Vector3dVector 的实例也可以直接用于 Open3D 的许多函数中,例如构建三维点云、进行平移和旋转等。这样使用起来更加简单和便捷。 总之,o3d.utility.vector3dvectorOpen3D Python 库中个极为重要的类,它为 3D 计算和图形处理提供了强有力的支持。在实际应用中,我们可以通过 Vector3dVector 类来构建、处理和分析三维向量,从而实现更为高效、准确的计算和图形处理操作。 ### 回答3: o3d.utility.vector3dvectorOpen3D中的向量类,用于表示三维向量。它基于C++语言实现,并提供Python接口供用户调用。 vector3dvector类包含了三个基本的向量运算:加法、减法和点积。加法和减法用于计算两个向量之间的和或差,点积则用于计算两个向量之间的夹角余弦值。此外,vector3dvector还提供了各种方便的方法,如获取向量的长度、归化向量、向量的L2距离等。 该类还支持许多向量之间的复合运算,如叉乘、投影、反射、求垂直向量等。这些运算可用于计算光线散射、模拟物理力学等领域。 vector3dvector类的另个重要功能是支持与numpy数组的互相转换。这为在Open3D中使用numpy数据提供了更大的灵活性。 总之,vector3dvector类是Open3D中非常重要的部分,可用于各种科学计算和工程应用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值