4

我有一个 numpy 数组,它是形状(高度,宽度,3)的彩色图像“img”,还有一个形状(高度,宽度)的深度 numpy 数组。我想创建一个 RGBD 图像并显示它,为此我正在执行以下操作:

o3d.geometry.RGBDImage.create_from_color_and_depth(img, depth)

但我得到了错误:

TypeError: create_from_color_and_depth(): incompatible function arguments. The following argument types are supported:
    1. (color: open3d.open3d_pybind.geometry.Image, depth: open3d.open3d_pybind.geometry.Image, depth_scale: float = 1000.0, depth_trunc: float = 3.0, convert_rgb_to_intensity: bool = True) -> open3d.open3d_pybind.geometry.RGBDImage

如何解决这个问题?如果它需要 Image 类型,那么如何将 numpy 数组转换为 Image 类型?

即使我将 numpy 数组传递给 o3d.geometry.Image 构造函数,如下所示:

o3d.geometry.RGBDImage.create_from_color_and_depth(o3d.geometry.Image(img), o3d.geometry.Image(depth))

我得到错误:

TypeError: create_from_color_and_depth(): incompatible function arguments. The following argument types are supported:
    1. (color: open3d.open3d_pybind.geometry.Image, depth: open3d.open3d_pybind.geometry.Image, depth_scale: float = 1000.0, depth_trunc: float = 3.0, convert_rgb_to_intensity: bool = True) -> open3d.open3d_pybind.geometry.RGBDImage

如何解决这个问题并从 rgb numpy 数组和深度 numpy 数组创建 RGBD 图像?

4

2 回答 2

2

如果您共享可重现的示例,那就太好了,但我认为Image从 np.array 创建并不像调用 ctor 那样简单,基于signature。这不一定是 uint8 数组,对吧?

根据这篇文章,您必须按如下方式创建它:

depth_as_img = o3d.geometry.Image((depth).astype(np.uint8))

并进一步传递到create_from_color_and_depth。因此,您必须明确指定它是一个 uint8 数组。

于 2020-08-27T09:29:18.613 回答
1

您应该检查convert_rgb_to_intensity此函数中的参数。默认情况下,它将使用灰度图像。这样,您的彩色图像应该只有一个通道。如果您想要 RGB,请将该参数设置为 false 并查看是否可以解决。

此外,从 numpy 到 open3d 图像的额外评论:https ://github.com/intel-isl/Open3D/issues/957

于 2020-09-07T21:40:43.153 回答