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

如何将RGB数组映射为16×16网格并绘制归一化RGB图?

如何将RGB数组绘制成16×16网格图

首先你需要修正颜色生成代码的一个小问题:np.linspace需要指定生成256个点,否则默认只生成50个。另外可以用更高效的numpy原生操作替代生成器转换RGB,避免循环开销。

接下来,核心步骤是将rgb_colors重塑为16×16×3的三维数组(对应网格的行、列、RGB通道),然后用matplotlib的imshow直接绘制——因为imshow支持直接输入RGB格式的图像数组。

完整实现代码

import numpy as np
import matplotlib.pyplot as plt

# 生成256个均匀分布的RGB整数(0到0xFFFFFF)
all_colors_int = np.linspace(0, (255 << 16) + (255 << 8) + 255, 256, dtype=np.uint32)

# 用numpy原生操作转换为RGB数组,比生成器更高效
r = ((all_colors_int >> 16) & 255).astype(np.uint8)
g = ((all_colors_int >> 8) & 255).astype(np.uint8)
b = (all_colors_int & 255).astype(np.uint8)
rgb_colors = np.stack([r, g, b], axis=1)

# 将RGB数组重塑为16×16×3的网格形状
rgb_grid = rgb_colors.reshape(16, 16, 3)

# 绘制网格图
plt.figure(figsize=(8, 8))
# 关闭坐标轴,让网格更清晰
plt.axis('off')
# imshow接受0-255的uint8类型RGB数组,直接显示
plt.imshow(rgb_grid)
plt.show()

关键说明

  • 重塑数组:reshape(16,16,3)把一维的256个RGB元素转换成16行16列的网格,每个单元格对应一个RGB颜色。
  • imshow的输入要求:如果是uint8类型的RGB数组,数值范围0-255直接可用;如果是float类型则需要归一化到0-1区间。
  • 你定义的data数组其实不需要用到,因为我们直接用颜色数组的位置对应网格的行列,不需要额外的数值数据映射颜色。

如果需要带网格线的效果,可以额外添加:

# 添加网格线(可选)
plt.grid(True, color='white', linewidth=1)
plt.gca().set_xticks(np.arange(-0.5, 16, 1))
plt.gca().set_yticks(np.arange(-0.5, 16, 1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:31:30