Open3d 获取渲染和固定视角json文件及读入

1. Open3d的渲染交互

在使用open3d对点云进行可视化,使用一个自己喜欢的渲染风格是很有必要的,open3d提供了一个调节渲染的方法,当你运行程序,打开open3d的窗口,鼠标点击窗口,按H就会弹出,交互命令的帮助,如下图所示:
open3d交互命令
上面的命令有些多,大家可以对照英文意思去使用,个人觉得比较立竿见影的就是 – Color control – 部分,大家可以自己试一试,我比较喜欢Color map options。open3d这个库有一个很大的问题,就是他的render mode control 里面的增加线宽暂不好用,如果好用了请通知我。

保存渲染结果到json文件中

当调整好渲染风格后,可以按O键获取当前的渲染设置

保存渲染图片

当你调整好后,想要保存图片按P就可以截取当前的窗口图片
剩余的功能大家自己探索

2.获取视角json文件

通过如下代码就可以获取视角json文件

import os
import numpy as np
import struct
import open3d
import time

from open3d import visualization


def read_bin_velodyne(path):
    pc_list = []
    with open(path, 'rb') as f:
        content = f.read()
        pc_iter = struct.iter_unpack('ffff', content)
        for idx, point in enumerate(pc_iter):
            pc_list.append([point[0], point[1], point[2]])
    return np.asarray(pc_list, dtype=np.float32)

def save_view_point(pcd, filename):
    vis = visualization.Visualizer()
    vis.create_window(window_name='pcd', width=1440, height=1080)
    vis.add_geometry(pcd)

    vis.get_render_option().load_from_json('renderoption.json')
    vis.run()  # user changes the view and press "q" to terminate
    param = vis.get_view_control().convert_to_pinhole_camera_parameters()
    open3d.io.write_pinhole_camera_parameters(filename, param)
    # vis.destroy_window()


def load_view_point(pcd, filename):
    vis = visualization.Visualizer()
    vis.create_window(window_name='pcd', width=1440, height=1080)
    ctr = vis.get_view_control()
    param = open3d.io.read_pinhole_camera_parameters(filename)
    vis.add_geometry(pcd)
    vis.get_render_option().load_from_json('renderoption.json')
    ctr.convert_from_pinhole_camera_parameters(param)
    vis.run()
    vis.destroy_window()


if __name__ == "__main__":
    example = read_bin_velodyne("data\\object\\training\\velodyne\\000010.bin")  # 传入自己当前的pcd文件
    pcd = open3d.geometry.PointCloud()
    pcd.points = open3d.utility.Vector3dVector(example)
    save_view_point(pcd, "BV_1440.json")  # 保存好得json文件位置
    load_view_point(pcd, "BV_1440.json")  # 加载修改时较后的pcd文件

成功获取需要的json文件需要注意2点

  • 传入一张pcd文件,注意路径不易出错
  • 视角的json文件需要跟你可视化的窗口的尺寸对应上,才有效,
    尺寸分别在load_view_point函数和save_view_point函数第二行

3.在代码中读入视角json和渲染json

这是我之前博客的代码加载的示范,可以看那篇文章整体的使用情况。

def draw_3dframeworks(vis,points):

    position = points
    points_box = np.transpose(position)

    lines_box = np.array([[0, 1], [1, 2], [0, 3], [2, 3], [4, 5], [4, 7], [5, 6], [6, 7],
                          [0, 4], [1, 5], [2, 6], [3, 7], [0, 5], [1, 4]])
    colors = np.array([[1., 0., 0.] for j in range(len(lines_box))])
    line_set = o3d.geometry.LineSet()

    line_set.points = o3d.utility.Vector3dVector(points_box)
    line_set.lines = o3d.utility.Vector2iVector(lines_box)
    line_set.colors = o3d.utility.Vector3dVector(colors)


    render_option.line_width = 5.0
    vis.update_geometry(line_set)
    render_option.background_color = np.asarray([1, 1, 1])
    # vis.get_render_option().load_from_json('renderoption_1.json')
    render_option.point_size = 4
    #param = o3d.io.read_pinhole_camera_parameters('BV.json')



    print(render_option.line_width)
    ctr = vis.get_view_control()

    vis.add_geometry(line_set)
    #ctr.convert_from_pinhole_camera_parameters(param)
    vis.update_geometry(line_set)
    vis.update_renderer()
————————————————
版权声明:本文为CSDN博主「多好的天啊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44491667/article/details/120960701

对应的API为如下所示。

    vis.get_render_option().load_from_json('renderoption_1.json')
    param = o3d.io.read_pinhole_camera_parameters('BV.json')

通过以上操作就可以获得比较美观的可视化效果了:
在这里插入图片描述文章来源地址https://uudwc.com/A/n88X

通过如上方法就可以实现,对渲染效果和视角进行固定,保证你产出的图片是同一风格。如果要动态的显示点云,固定视角是必不可少的。

原文地址:https://blog.csdn.net/weixin_44491667/article/details/124303281

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年06月14日 14:38
Vue3 +TypeScript 引入 BabylonJs(Vue3实现3D)【一篇文章精通系列】
下一篇 2023年06月14日 14:38