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

Python在3D空间指定Z轴位置放置无变形2D图像的问题求助

问题根源

你的代码存在两个核心问题导致图像旋转+变形:

  • 图像的行列索引与3D空间的XY轴对应关系错误,导致图像旋转90度
  • 硬编码居中偏移、未设置3D坐标轴等比例显示,导致图像拉伸变形

修复后代码

import numpy as np
import matplotlib.pyplot as plt
import cv2

# 读入图像并转RGB
img = cv2.imread('input_image')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
h, w = img.shape[:2] # 获取图像实际高、宽

# 生成对应图像宽高的网格
x, y = np.ogrid[0:w, 0:h]
# 归一化像素值
img = img.astype('float32')/255

fig = plt.figure()
ax = fig.add_subplot(projection='3d')

# 翻转y轴匹配图像原点在左上角的规则,按图像实际尺寸居中
x_grid = x - w/2
y_grid = h - y - h/2

# 绘制Z=-10和Z=10的图像面
ax.plot_surface(x_grid, y_grid, np.full_like(x_grid, -10), 
                rstride=1, cstride=1, facecolors=img, shade=False)
ax.plot_surface(x_grid, y_grid, np.full_like(x_grid, 10), 
                rstride=1, cstride=1, facecolors=img, shade=False)

# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

# 设置坐标轴等比例,避免拉伸变形
ax.set_box_aspect((w, h, 20))

fig.savefig('output_image')
plt.close()

关键修改说明

  • 新增获取图像实际高宽逻辑,替换硬编码的50偏移,按实际尺寸自动居中
  • 调整网格与坐标对应关系,翻转y轴匹配图像的左上角原点规则,解决90度旋转问题
  • 添加shade=False避免3D光照影响图像显示色彩,set_box_aspect设置坐标轴比例,解决变形问题
  • 修正原代码plt.Figure()的类调用错误,改为实例化方法plt.figure(),避免潜在异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 10:03:02