open3d函数教程学习(持续更新)
Open3D:3D数据处理的现代库
Open3D的核心功能包括:
3D数据结构
3D数据处理算法
场景重建
表面对齐
3D可视化
基于物理的渲染(PBR)
在C ++和Python中可用
导入open3d模块和打印出帮助信息。
import open3d as o3d
pcd = o3d.io.read_point_cloud("../../TestData/ICP/cloud_bin_0.pcd")
print(pcd)
geometry::PointCloud with 198835 points.
从open3d模块导入read_point_cloud
函数。它读取一个点云文件,并返回PointCloud类的实例。 open3d.geometry.PointCloud
print(pcd)打印点云的简要信息。
open3d.open3d_pybind.io模块中内置函数read_point_cloud
从文件读取PointCloud的功能read_point_cloud
(filename, format=‘auto’, remove_nan_points=True, remove_infinite_points=True, print_progress=False)
参数:
filename(str):文件路径。
格式(str,可选,默认='auto'):输入文件的格式。 如果未指定或设置为``auto'',则从文件扩展名中推断格式。
remove_nan_points(布尔型,可选,默认为True):如果为true,则从PointCloud中删除所有包含NaN的点。
remove_infinite_points(布尔型,可选,默认为True):如果为true,则从PointCloud中删除所有包含无限值的点。
print_progress(布尔型,可选,默认= False):如果设置为true,则在控制台中可视化进度条
read_point_cloud从文件读取点云。它尝试根据扩展名对文件进行解码。支持的扩展名是:pcd,ply,xyz,xyzrgb,xyzn,pts
Mesh
以下代码用于读取和写入网格
print("Testing IO for meshes ...")
mesh = o3d.io.read_triangle_mesh("../../TestData/knot.ply")
print(mesh)
o3d.io.write_triangle_mesh("copy_of_knot.ply", mesh)
Testing IO for meshes …
geometry::TriangleMesh with 1440 points and 2880 triangles.
True
与点云的数据结构相比,网格具有定义3D表面的三角形。
默认情况下,Open3D尝试通过文件扩展名来推断文件类型。 以下是受支持的三角形网格文件类型的列表。支持的扩展名:ply,stl,obj,off,gltf
Voxel downsampling
体素降采样使用常规的体素网格从输入点云创建统一降采样的点云。 它通常用作许多点云处理任务的预处理步骤。 就是将点云分块(这里为体素),然后逐块进行降采样(这里生成一个点),该算法分为两个步骤:
- 点被存储到体素中。
- 每个占用的体素通过平均内部的所有点来生成精确的一个点。
print("Downsample the point cloud with a voxel of 0.05")
downpcd = pcd.voxel_down_sample(voxel_size=0.05)
o3d.visualization.draw_geometries([downpcd], zoom=0.3412,
front=[0.4257, -0.2125, -0.8795],
lookat=[2.6172, 2.0475, 1.532],
up=[-0.0694, -0.9768, 0.2024])
Downsample the point cloud with a voxel of 0.05voxel_down_sample
(self,voxel_size)
根据体素降采样从点云输入到点云输出。如果法线和颜色存在则将其平均
参数voxel_size
(float) – 要向下采样的体素大小
返回open3d.geometry.PointCloud
voxel_down_sample_and_trace
(self,voxel_size,min_bound,max_bound,approximate_class=False)
使用geometry.PointCloud.VoxelDownSample
下采样的函数。 在下采样之前还记录点云索引
参数voxel_size
(float) – 向下采样的体素大小
min_bound
(numpy.ndarray[float64[3, 1]]) – 体素边界的最小坐标
max_bound
(numpy.ndarray[float64[3, 1]]) – 体素边界的最大坐标
approximate_class
(bool, optional, default=False) – 近似类 可选,一般默认False
返回Tuple
[open3d.geometry.PointCloud
, numpy.ndarray[int32[m, n]
], 采样后的稀疏点云数据List
[open3d.utility.IntVector
] 立方编号
open3d.utility.Vector3dVector
class open3d.utility.Vector3dVector
将形状(n,3)的float64 numpy数组转换为Open3D格式。
用法示例
import open3d
import numpy as np
pcd = open3d.geometry.PointCloud()
np_points = np.random.rand(100, 3)
# From numpy to Open3D
pcd.points = open3d.utility.Vector3dVector(np_points)
# From Open3D to numpy
np_points = np.asarray(pcd.points)
pcd.points = open3d.utility.Vector3dVector
(np_points)
将形状(n,3)的float64 numpy数组转换为Open3D格式
np_points = np.asarray
(pcd.points)
将Open3D格式转换为 numpy数组 (n,3)
get_min_bound(self)
返回几何坐标的最小范围
返回numpy.ndarray
[float64 [3,1]]
get_max_bound(self)
返回几何坐标的最大范围
返回numpy.ndarray
[float64[3, 1]]
用法示例
import open3d
min_bound = dense_pcd.get_min_bound() - voxel_size * 0.5 #获取最小点坐标 - 0.05 * 0.5
max_bound = dense_pcd.get_max_bound() + voxel_size * 0.5
open3D_pointnet2_Semantic3d_master中利用体素进行数据降采样,首先取得体素边界的最大坐标和最小坐标。
本文地址:https://blog.csdn.net/CSDNcylinux/article/details/107339357
上一篇: 何成为一个优雅的女人,,优雅女人最该花钱的9个地方
下一篇: 4-python结构数据三兄弟