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

使用Open3D从单目深度图生成点云时遇draw_geometries参数错误

Open3D 0.15.1中draw_geometries参数错误及点云生成优化方案

问题背景

尝试用Open3D从单目深度图生成点云,环境配置:OpenCV == 4.4.0,Open3D == 0.15.1;输入BGR图像尺寸640x480x3,深度图像尺寸640x480x3。运行代码后触发参数类型错误。

代码实现

import open3d as o3d
import numpy as np
import matplotlib.pyplot as plt
import os 
import sys
import cv2
import open3d_tutorial as o3dtut
o3dtut.interactive = not "CI" in os.environ

color_raw = o3d.io.read_image('colorImg.jpg')
depth_raw = o3d.io.read_image('depthImg2.png')

rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(color_raw,depth_raw)
print(rgbd_image)
camera_intrinsic = o3d.camera.PinholeCameraIntrinsic(
        o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault)

pcd = o3d.geometry.PointCloud.create_from_rgbd_image(rgbd_image, camera_intrinsic)
pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
o3d.visualization.draw_geometries([pcd], zoom=0.5)

报错信息

TypeError                                 Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_18872/3179634559.py in <module>
      1 pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
----> 2 o3d.visualization.draw_geometries([pcd], zoom=0.5)

TypeError: draw_geometries(): incompatible function arguments. The following argument types are supported:
    1. (geometry_list: List[open3d.cpu.pybind.geometry.Geometry], window_name: str = 'Open3D', width: int = 1920, height: int = 1080, left: int = 50, top: int = 50, point_show_normal: bool = False, mesh_show_wireframe: bool = False, mesh_show_back_face: bool = False) -> None
    2. (geometry_list: List[open3d.cpu.pybind.geometry.Geometry], window_name: str = 'Open3D', width: int = 1920, height: int = 1080, left: int = 50, top: int = 50, point_show_normal: bool = False, mesh_show_wireframe: bool = False, mesh_show_back_face: bool = False, lookat: numpy.ndarray[numpy.float64[3, 1]], up: numpy.ndarray[numpy.float64[3, 1]], front: numpy.ndarray[numpy.float64[3, 1]], zoom: float) -> None

Invoked with: [PointCloud with 306097 points.]; kwargs: zoom=0.5

已尝试操作:将Open3D版本从0.16降级至0.15;调整图像尺寸。


解决方案

1. 核心参数错误修复

Open3D 0.15.1的draw_geometries函数有两个重载版本,zoom参数不能单独作为关键字传入,它仅在第二个重载版本中生效,且必须同时搭配lookat、up、front三个视角参数。

方案A:移除zoom参数,使用默认可视化

直接删除zoom=0.5,调用基础重载版本,之后可在Open3D可视化窗口通过鼠标滚轮手动调整缩放:

o3d.visualization.draw_geometries([pcd])

方案B:传入完整视角参数固定缩放比例

如果需要在代码中指定缩放比例,需同时传入lookat、up、front三个视角参数,示例如下:

import numpy as np

# 使用默认视角参数
lookat = np.array([0.0, 0.0, 0.0]).reshape(3, 1)
up = np.array([0.0, 1.0, 0.0]).reshape(3, 1)
front = np.array([0.0, 0.0, -1.0]).reshape(3, 1)

o3d.visualization.draw_geometries(
    [pcd],
    lookat=lookat,
    up=up,
    front=front,
    zoom=0.5
)

2. 深度图格式优化(潜在问题修复)

输入的深度图为3通道格式,但Open3D的RGBDImage.create_from_color_and_depth要求深度图为单通道,否则可能导致点云生成异常。建议在读取深度图后转换为单通道:

# 读取深度图并转换为单通道
depth_raw = o3d.io.read_image('depthImg2.png')
depth_np = np.asarray(depth_raw)
if depth_np.ndim == 3:
    depth_np = cv2.cvtColor(depth_np, cv2.COLOR_BGR2GRAY)
depth_raw = o3d.geometry.Image(depth_np)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:15:54