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

如何将代码生成的多边形绘图转换为NumPy数组?

将Matplotlib多边形绘图保存为NumPy数组

你可以通过Matplotlib画布的内置方法直接提取像素数据并转换为NumPy数组,无需保存为图像文件,具体实现步骤如下:

  1. 强制画布渲染内容:Matplotlib默认延迟渲染,需要先调用fig.canvas.draw()让绘图内容渲染到画布上;
  2. 提取像素数据:从画布中读取RGB(或RGBA)格式的像素字符串,转换为NumPy数组;
  3. 调整数组形状:将一维数组重塑为(高度, 宽度, 通道数)的标准图像格式。

修改后的完整代码如下:

import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
import numpy as np

fig, ax = plt.subplots(figsize=(5.12, 5.12), dpi=100)  # 指定dpi确保尺寸精确为512x512
N = 3
val = np.random.rand(N, 2, 3)
patches = []
for i in range(3):
    patches.append(Polygon(val[:, :, i], True))
p = PatchCollection(patches, alpha=0.6)
p.set_array(np.array([500,23,1002]))  # 为多边形分配数值
ax.add_collection(p)
fig.colorbar(p)
plt.axis('off')

# 核心步骤:将绘图转为NumPy数组
fig.canvas.draw()  # 强制渲染画布内容
width, height = fig.canvas.get_width_height()
# 提取RGB格式像素数据,转为uint8类型数组
img_array = np.frombuffer(fig.canvas.tostring_rgb(), dtype=np.uint8)
# 重塑为(高度, 宽度, 3)的图像数组结构
img_array = img_array.reshape(height, width, 3)

# 可选:验证数组信息
print(img_array.shape)  # 输出 (512, 512, 3)
print(img_array[0, 0])  # 输出左上角像素的RGB值

plt.show()

补充说明

  • 如果需要保留透明度(Alpha通道),可将tostring_rgb()替换为tostring_rgba(),并将reshape的通道数改为4;
  • 指定dpi=100是为了和figsize=(5.12,5.12)对应,确保输出数组尺寸为512x512,若不需要精确尺寸可省略该参数;
  • 若不需要弹出绘图窗口,可删除plt.show(),不影响NumPy数组的生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:40:31