def get_minimal_oriented_bounding_box(
        *,
        save_vertices_to_file="",
        **kwargs
) -> Tuple[open3d.geometry.OrientedBoundingBox, np.ndarray]:
    pass
计算最小定向包围盒(OBB)。
save_vertices_to_file (str, optional): 可选参数,一个可写的文件路径,保存OBB的顶点的xyz坐标。默认为""。除了上述参数外,该函数还接受以下其它参数:
radius: 确定点云的边界球的半径。具体来说,该半径内的所有点都被考虑在内。当使用体素网格时需要该参数。半径的值应大于点云中点之间的最大距离。
sample: 对点云进行下采样的因子,即每个采样体素的边长。通过将点云下采样到较小的密度来加速计算。
fast: 是否使用快速方法。快速方法迭代次数较少,但通常能够获得足够准确的结果。如果需要更高精度的结果,请将其设置为False。
return_pcd: 是否同时返回采样后的点云。开启该项会使函数返回一个二元组,其中第二个元素是采样后的点云。
use_convex_hull: 是否先计算点云的凸包。当点云具有强凸包结构时,可以加速计算。
growing_duration: 迭代方法的最长时间(秒)。对于大型点云,设置一个合适的时间可以使结果更好。
growing_speed: 迭代方法的速度因子。值越高,速度越快。
max_num_points: 当原始点云的数量超过该指定数量时,使用减小采样密度的方法来简化计算。对于大型点云,建议将该参数设置为一个较小值,否则可能会导致内存溢出或计算时间过长。
counter: 该参数不应手动指定,在点云下采样过程中自己更新。
返回一个二元组 (obb, pcd), pcd 是采样点云,obb 是最小定向包围盒。
若禁用了 return_pcd,则仅返回一个 obb。
import open3d as o3d
pcd = o3d.io.read_point_cloud("cloud.ply")
# 求解OBB
obb = pcd.get_minimal_oriented_bounding_box()
# 保存采样后的点云和OBB的顶点的xyz坐标
obb, sampled_pcd = pcd.get_minimal_oriented_bounding_box(save_vertices_to_file="./obb.xyz", return_pcd=True)
# 读取保存的OBB的顶点的xyz坐标
import numpy as np
obb_vertices = np.loadtxt("./obb.xyz")
NotImplementedError: 当点云为空时抛出。open3d.geometry.OrientedBoundingBox: 表示最小定向包围盒的类。该函数使用了下采样和不同的回国方法。先计算点云的凸包,再生成多个正交轴方向的候选轴。从其中一个轴开始,计算轴方向上的点云范围。利用新点在坐标系中的距离计算一个范围并移动坐标系。一旦找到一个比之前更好的轴,以其方向为新的轴开始计算,直到所有轴都被枚举。最终OBB的姿势和范围存储在 OrientedBoundingBox 对象中返回。