如何将代码生成的多边形绘图转换为NumPy数组?
将Matplotlib多边形绘图保存为NumPy数组
你可以通过Matplotlib画布的内置方法直接提取像素数据并转换为NumPy数组,无需保存为图像文件,具体实现步骤如下:
- 强制画布渲染内容:Matplotlib默认延迟渲染,需要先调用
fig.canvas.draw()让绘图内容渲染到画布上; - 提取像素数据:从画布中读取RGB(或RGBA)格式的像素字符串,转换为NumPy数组;
- 调整数组形状:将一维数组重塑为
(高度, 宽度, 通道数)的标准图像格式。
修改后的完整代码如下:
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
相关产品推荐
相关产品推荐

