You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何将numpy数组转换为Open3D Image格式?

OpenCV numpy数组转Open3D Image实现方案

内置转换支持说明

Open3D原生提供了直接从numpy数组构造Image对象的能力,无需自行实现内存拷贝或格式适配逻辑,你可以直接调用o3d.geometry.Image()传入符合要求的numpy数组完成转换。

转换步骤及注意事项

  • OpenCV输出的numpy数组默认通道顺序为BGR,和Open3D默认使用的RGB通道顺序不一致,三通道彩色图像转换前需要先做通道调换:cv2.cvtColor(cv_numpy_array, cv2.COLOR_BGR2RGB)
  • 如果传入的numpy数组经过切片、转置等操作导致内存不连续,需要先调用np.ascontiguousarray()或.copy()生成连续内存数组,否则构造时会抛出异常
  • 单通道灰度图、深度图不需要做通道转换,符合内存连续要求的前提下可直接传入构造函数

完整代码示例

import cv2
import numpy as np
import open3d as o3d
from cv_bridge import CvBridge

# ROS监听器中获取图像msg后的转换逻辑
bridge = CvBridge()
# 此处的img_msg为image_transport订阅回调中拿到的ROS图像消息
cv_numpy_img = bridge.imgmsg_to_cv2(img_msg, desired_encoding="passthrough")

# 分类型转换
if len(cv_numpy_img.shape) == 3 and cv_numpy_img.shape[-1] == 3:
    # 彩色BGR转RGB
    rgb_numpy_img = cv2.cvtColor(cv_numpy_img, cv2.COLOR_BGR2RGB)
    o3d_img = o3d.geometry.Image(rgb_numpy_img)
else:
    # 灰度图/深度图直接转换
    o3d_img = o3d.geometry.Image(np.ascontiguousarray(cv_numpy_img))

结果验证

你可以通过以下方式验证转换是否正确:

  • 打印对象信息:print(o3d_img),输出的宽、高、通道数、位深需和原numpy数组参数一致
  • 可视化查看:o3d.visualization.draw_geometries([o3d_img]),可直接查看图像内容是否正常

内容的提问来源于stack exchange,提问作者zjnyly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:39:04