open3d相关操作总结

本文介绍了如何在Open3D中利用交互式命令进行操作,如截图功能,以及如何理解和使用`P`键生成的ScreenCamera参数,包括外参extrinsic和内参intrinsic。此外,还提到`Ctrl+C`和`Ctrl+V`在调整视角后的应用,以及处理`TypeError`问题的方法。
摘要由CSDN通过智能技术生成
  1. open3d其实有很多交互式命令,在运行程序打开了open3d渲染的窗口后,鼠标点击窗口,按H就会弹出,交互命令的帮助,如下图所示:
    在这里插入图片描述
    其中比较常用的有:
    Q :退出当前窗口
    H:打印帮助命令
    P:对当前窗口进行截图,重点来了,按下P的时候,在你的工程目录下,会增加一个当前窗口的png图像以及对应的json相机参数。
    在这里插入图片描述
    其中ScreenCamera_2024-01-11-11-08-22.json的内容如下,包含当前视角相机的外参extrinsic,内参以及图像信息等等:
{
	"class_name" : "PinholeCameraParameters",
	"extrinsic" : 
	[
		0.99946264692571185,
		-8.6398302849258375e-05,
		-0.032778192988375789,
		0.0,
		0.0054931702559795721,
		-0.98541262313045108,
		0.17009346623460431,
		0.0,
		-0.032314740920959963,
		-0.1701821221823753,
		-0.98488263402738219,
		0.0,
		0.016156891452814959,
		0.085091532028104933,
		17.120130331518144,
		1.0
	],
	"intrinsic" : 
	{
		"height" : 1080,
		"intrinsic_matrix" : 
		[
			935.30743608719376,
			0.0,
			0.0,
			0.0,
			935.30743608719376,
			0.0,
			959.5,
			539.5,
			1.0
		],
		"width" : 1920
	},
	"version_major" : 1,
	"version_minor" : 0
}

Ctrl+C && Ctrl +V:调整视图视角后,Ctrl+C是拷贝了当前的相机视角状态,Ctrl + V复制粘贴到需要的地方就OK了,view status信息如下:

{
	"class_name" : "ViewTrajectory",
	"interval" : 29,
	"is_loop" : false,
	"trajectory" : 
	[
		{
			"boundingbox_max" : [ 6.0000009536743164, 6.0000009536743164, 2.0000000119209291 ],
			"boundingbox_min" : [ -6.0, -6.0, -1.0 ],
			"field_of_view" : 60.0,
			"front" : [ 0.0, 0.0, 1.0 ],
			"lookat" : [ 4.76837158203125e-07, 4.76837158203125e-07, 0.50000000596046457 ],
			"up" : [ 0.0, 1.0, 0.0 ],
			"zoom" : 0.69999999999999996
		}
	],
	"version_major" : 1,
	"version_minor" : 0
}

这里面的各个变量都是什么含义,以下是GPT3.5的回答,
在这里插入图片描述
2. 可视化报错
显示界面一闪而过,报错信息如下:

vis.add_geometry(voxels)
TypeError: add_geometry(): incompatible function arguments. The following argument types are supported:
    1. (self: open3d.cpu.pybind.visualization.Visualizer, geometry: open3d.cpu.pybind.geometry.Geometry, reset_bounding_box: bool = True) -> bool

Invoked with: Visualizer with name Open3D, array([[-5.95, -5.95, -0.95],
       [-5.95, -5.95, -0.85],
       [-5.95, -5.95, -0.75],
       ...,
       [ 5.95,  5.95,  4.75],
       [ 5.95,  5.95,  4.85],
       [ 5.95,  5.95,  4.95]])

原因及解决方案:
原因是因为vis.add_geometry(voxel)直接添加的(33456,3)numpy array数组,这里add_geometry必须添加点云对象,open3d可以用以下代码把数组对象转换成点云对象:

pcd_voxel = o3d.geometry.PointCloud() #创建一个open3d的点云对象
pcd_voxel.points = o3d.utility.Vector3dVector(voxels)#Vector3dVector方法将voxels数组转换成点云对象的points

pcd_reconstruction = o3d.geometry.PointCloud()
pcd_reconstruction.points = o3d.utility.Vector3dVector(pcd_reconstruction_points)

vis = o3d.visualization.Visualizer()
vis.create_window()
vis.add_geometry(pcd_voxel)#此时就可以正常添加要可视化的对象
vis.add_geometry(pcd_reconstruction)
vis.run()
vis.destroy_window()

值得注意的一点是open3d显示的时候,单位是毫米,而雷达数据单位是米,一般标定的ego2lidar的RT外参单位也是毫米,所以再把点云数据读进来的时候,要乘以1000做一个单位的转换。
可视化结果从这样变成那样:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我现在强的可怕~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值