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 +--】来缩小点。鼠标滚轮来将整体放大缩小。

  • 16
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Open3D是一个开源的3D计算库,它支持多种点云格式。点云是由一系列的三维坐标点组成的数据集,常用于表示三维场景或物体的几何形状。 Open3D可以读取写入常见的点云格式,如PLY、PCD和XYZ等。使用Open3D库中的函数,我们可以方便地将这些点云格式导入到程序中进行处理,或将处理后的点云保存为指定的格式。 以PLY格式为例,PLY是Polygon File Format的缩写,是一种常用的三维模型数据格式。Open3D提供了`read_point_cloud`函数和`write_point_cloud`函数,通过这两个函数可以轻松实现PLY格式的读取写入读取PLY格式的点云数据后,我们可以对点云进行各种操作,如点云配准、滤波、重建等,然后再将处理后的点云保存为PLY格式或其他格式,如PCD或XYZ等。 除了PLY格式,Open3D还支持其他格式的点云数据。例如,使用`read_point_cloud`和`write_point_cloud`函数,我们可以读取写入PCD格式的点云数据,该格式常用于点云库PCL(Point Cloud Library)中。此外,Open3D还可以读取写入XYZ格式的点云数据,该格式简单而常用,只包含点的坐标信息。 综上所述,Open3D支持多种点云格式,包括PLY、PCD和XYZ等。无论是从这些常见的点云格式中读取数据,还是将处理后的点云数据保存为指定的格式,Open3D都提供了方便易用的函数来实现这些操作。这使得Open3D成为一个功能强大且灵活的工具,能够满足不同的点云处理需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值