首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用open3d - python从深度numpy数组中获取点云

使用open3d - python从深度numpy数组中获取点云
EN

Stack Overflow用户
提问于 2021-05-19 16:08:55
回答 1查看 935关注 0票数 0

我有一个2D numpy阵列(640x480),它包含了我通过渲染系统获得的每个像素的深度值。现在我要获得它的点云。我尝试了很多方法,但我对轮换有问题:

方法我试过:

  1. using open3d-python库:我找到了一个示例并遵循以下步骤:

代码语言:javascript
运行
复制
color_raw = o3d.io.read_image("../../test_data/RGBD/color/00000.jpg")
depth_raw = o3d.io.read_image("../../test_data/RGBD/depth/00000.png")
rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(
    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))
    o3d.visualization.draw_geometries([pcd])

问题

( a)我没有rgbd图像。我所拥有的只是一个包含每个像素深度值的2d numpy数组,它可以保存为png图像并用于参数depth_raw。

( b)我试图仅使用函数open3d.geometry.PointCloud.create_from_depth_image(depth, intrinsic, extrinsic=(with default value), depth_scale=1000.0, depth_trunc=1000.0, stride=1, project_valid_depth_only=True)从深度图像创建点云,但是当我试图传递png图像时会出现错误。如何将numpy数组传递到所需的图像格式。

请帮助我将上述疑问继续下去。

提前感谢

代码语言:javascript
运行
复制
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-08 22:07:17

尝试如下:深度必须是n,n numpy数组,然后

代码语言:javascript
运行
复制
import open3d as o3d

vertices = []
depths = (your_depth_values)

for x in range(depths.shape[0]):
    for y in range(depths.shape[1]):
        vertices.append((float(x), float(y), depths[x][y]))

pcd = o3d.geometry.PointCloud()
point_cloud = np.asarray(np.array(vertices))
pcd.points = o3d.utility.Vector3dVector(point_cloud)
pcd.estimate_normals()
pcd = pcd.normalize_normals()
o3d.visualization.draw_geometries([pcd])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67606927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档