如何从numpy rgb数组和depth数组创建rgbd图像?

j5fpnvbx  于 2023-05-07  发布在  其他
关注(0)|答案(3)|浏览(143)

我有一个numpy数组,它是shape(height,width,3)的彩色图像“img”,还有一个shape(height,width)的深度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数组和depth numpy数组创建RGBD图像?

yb3bgrhw

yb3bgrhw1#

如果你能分享一个可重复的例子就更好了,但是我认为从np.array创建Image并不像基于签名调用ctor那么简单。这不一定是uint8的数组,对吧?
基于这篇文章,你必须创建它如下:

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

并进一步传递到create_from_color_and_depth。所以,你必须显式地指定它是一个uint8数组。

rsl1atfo

rsl1atfo2#

您应该检查此函数中的convert_rgb_to_intensity参数。默认情况下,它将使用灰度图像。这样,您的彩色图像应该只有一个通道。如果你想要RGB,将该参数设置为false,看看它是否能解决问题。
此外,从numpy到open3d图像的额外注解:https://github.com/intel-isl/Open3D/issues/957

ntjbwcob

ntjbwcob3#

我在这一点上与@ketza。你必须把你的图像转换成连续的数组。你可以用numpy数组来做这件事,如下所示!

depth_map = np.array(depth_map, dtype=np.float32)

相关问题