python - 在 open3d-python 中更新相机内在参数
问题描述
我正在尝试在 python 中使用 Open3D 库来绘制 3D 模型。我的问题是我无法更新相机的内在属性。我想知道怎么做——如果可能的话。目前它使用默认的相机参数。
rgbd_image = o3d.geometry.RGBDImage.create_from_tum_format(color_raw, depth_raw)
a = o3d.camera.PinholeCameraIntrinsicParameters
pcd = o3d.geometry.PointCloud.create_from_rgbd_image(
rgbd_image,
o3d.camera.PinholeCameraIntrinsic(
o3d.camera.PinholeCameraIntrinsicParameters.Kinect2DepthCameraDefault))
# Flip it, otherwise the pointcloud will be upside down
pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
o3d.visualization.draw_geometries([pcd])
我想将内在矩阵更新为 [3131.58 0.00 1505.62 , 0.00 3131.58 2004.13, 0.00 0.00 1.00]
谢谢。
解决方案
然后,您必须声明一个open3d.camera.PinholeCameraIntrinsic
对象,使用所需的 intersic 矩阵对其进行初始化,如下所示:
cam = o3d.camera.PinholeCameraIntrinsic()
cam.intrinsic_matrix = [[3131.58, 0.00, 1505.62] , [0.00, 3131.58, 2004.13], [0.00, 0.00, 1.00]]
然后,您可以将对象传递给这样的create_point_cloud_from_rgbd_image
方法:
pcd = o3d.geometry.create_point_cloud_from_rgbd_image(rgbd_image,cam)
注意
cam
您可以使用其非默认构造函数来初始化对象以指定其宽度和高度,如下所示:
cam = o3d.camera.PinholeCameraIntrinsic(W, H, Fx, Fy, Cx, Cy)
编辑
经过一番搜索,我发现最好像这样初始化参数,以便能够同时定义内在和外在矩阵:
intrinsic = o3d.camera.PinholeCameraIntrinsic(w, h, fx,fy, cx, cy)
intrinsic.intrinsic_matrix = [[fx, 0, cx], [0, fy, cy], [0, 0, 1]]
cam = o3d.camera.PinholeCameraParameters()
cam.intrinsic = intrinsic
cam.extrinsic = np.array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 1.]])
pcd = o3d.geometry.create_point_cloud_from_rgbd_image(
rgbd_image, cam.intrinsic, cam.extrinsic)
推荐阅读
- r - 如何在 R 中同时遍历一个字符串向量和另一个数字向量?
- javascript - 如何避免使用“杀
" 每次收到错误命令:听 EADDRINUSE nodeJS? - vuejs2 - 如何在 vue-router 中使用 axios
- php - Laravel 控制器如果条件取决于输入文件
- python - 借助字典更正字符串中单词的拼写?
- php - 如果购物车中有 4 件商品,Woocommerce 不会显示弹出窗口
- c++ - 重构唯一函数具有不同参数的地方
- javascript - Uncaught SyntaxError: Unexpected token & 由于“错误
- c++ - QT QML 无法正确显示
- android - 从 URI 获取图像路径时出现空指针异常错误