我有一个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图像?
3条答案
按热度按时间yb3bgrhw1#
如果你能分享一个可重复的例子就更好了,但是我认为从np.array创建
Image
并不像基于签名调用ctor那么简单。这不一定是uint8的数组,对吧?基于这篇文章,你必须创建它如下:
并进一步传递到
create_from_color_and_depth
。所以,你必须显式地指定它是一个uint8数组。rsl1atfo2#
您应该检查此函数中的
convert_rgb_to_intensity
参数。默认情况下,它将使用灰度图像。这样,您的彩色图像应该只有一个通道。如果你想要RGB,将该参数设置为false,看看它是否能解决问题。此外,从numpy到open3d图像的额外注解:https://github.com/intel-isl/Open3D/issues/957
ntjbwcob3#
我在这一点上与@ketza。你必须把你的图像转换成连续的数组。你可以用numpy数组来做这件事,如下所示!