使用open3d.io.write_octree保存八叉树失败,求解决方案
解决Open3D中
write_octree无法保存八叉树及生成文本格式八叉树的问题 问题排查与基础修复
- 检查Open3D版本:旧版本的
write_octree存在已知bug,执行pip install --upgrade open3d升级到最新稳定版后重试保存操作。 - 验证八叉树构建有效性:在保存前添加代码确认八叉树已正确生成:
若输出显示根节点无子节点,说明print(f"Octree max depth: {octree.max_depth}") print(f"Root node has children: {octree.root_node.children is not None}")convert_from_point_cloud未成功构建八叉树,需检查点云数据是否有效。
生成文本格式八叉树文件
Open3D默认的write_octree保存的是二进制.oct文件,并非你需要的文本格式。要生成类似octree.txt的文件,需手动遍历八叉树节点并写入信息:
自定义文本写入函数
添加以下函数遍历八叉树节点,记录节点深度、路径、是否包含子节点、点云数量等信息:
def write_octree_to_txt(octree, output_path): def traverse_node(node, current_depth, node_path): # 提取节点核心信息 has_children = node.children is not None point_count = len(node.np_points) if hasattr(node, 'np_points') else 0 # 写入文本行 log_line = f"Depth: {current_depth}, NodePath: {node_path}, HasChildren: {has_children}, PointCount: {point_count}\n" with open(output_path, 'a', encoding='utf-8') as f: f.write(log_line) # 递归遍历子节点 if has_children: for idx, child in enumerate(node.children): if child is not None: traverse_node(child, current_depth + 1, f"{node_path}.{idx}") # 清空目标文件并启动遍历 open(output_path, 'w').close() traverse_node(octree.root_node, 0, "root")
在主代码中调用函数
替换原代码中的o3d.io.write_octree调用,改为:
write_octree_to_txt(octree, "octree.txt")
执行后即可得到包含八叉树节点详细信息的文本文件。
内容的提问来源于stack exchange,提问作者abinaya jeyakrishnan
相关产品推荐
相关产品推荐

