Open3D是一个开源库,支持快速开发处理3D数据的软件。Open3D后端是用C++实现的,经过高度优化并通过python的前端接口公开。Open3D提供了三种数据结构:点云(point cloud)、网格(mesh)和RGB-D图像。
本次实验使用Open3D开源库将深度图和原图生成三维点云数据,然后将点云可视化,截取3张不同角度的三维点云,遇到的问题是点云呈锥形状,后续还得再学习下Open3D库的使用。
代码如下:
# ===================================== # ===使用open3d库绘制点云 # 读取原图和深度图 colorImage = o3d.io.read_image('./img/A0.png') depthImage = o3d.io.read_image('./data/DepthMapAdirondack.png') # 创建rgbd图像 rgbdImage = o3d.geometry.RGBDImage().create_from_color_and_depth(colorImage, depthImage, depth_scale=1000.0, depth_trunc=3, convert_rgb_to_intensity=False) # 相机内参 intrinsics = o3d.camera.PinholeCameraIntrinsic() # fx = Q[2, 3] # fy = Q[2, 3] # cx = Q[0, 3] # cy = Q[1, 3] fx = config.cam_matrix_left[0, 0] fy = fx cx = config.cam_matrix_left[0, 2] cy = config.cam_matrix_left[1, 2] print(fx, fy, cx, cy) # 获取相机内参 intrinsics.set_intrinsics(width, height, fx=fx, fy=fy, cx=cx, cy=cy) # 外参 extrinsics = np.array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]]) # 生成point cloud 点云数据结构 # 不兼容的函数参数? 解决:不要外参,函数默认已给 pointcloud = o3d.geometry.PointCloud().create_from_rgbd_image(rgbdImage, intrinsic=intrinsics) # 翻转点云 pointcloud.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]]) # 将pcd点云保存 o3d.io.write_point_cloud('./data/pcdAdirondackZheng.pcd', pointcloud=pointcloud) # 可视化点云 o3d.visualization.draw_geometries([pointcloud], width=720, height=480) sys.exit(0)
参考博客:https://blog.csdn.net/dulingwen/article/details/98071584,侵删
标签:fx,cy,Open3D,点云,pointcloud,绘制,o3d From: https://www.cnblogs.com/xiejb2430/p/16757779.html