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
相关产品推荐
相关产品推荐

