python - 如何用pyglet显示一个numpy数组?

标签 python numpy pyglet

我有一个维度为 (100*100) 的标签矩阵,存储为一个 numpy 数组,我想用 pyglet 显示该矩阵。

我最初的想法是使用函数 pyglet.image.ImageData() 使用这个矩阵来形成一个新的 pyglet 图像。它需要图像数据的缓冲区作为输入,但是我不知道如何从 numpy 数组中获取正确格式的缓冲区。

有人知道吗?

附言。我目前的解决方案:

3d_label = numpy.empty([100,100,3])
3d_label[:,:,0] = label * 255            # value range of label is [0,1]
3d_label[:,:,1] = label * 255
3d_label[:,:,2] = label * 255
image_data = ctypes.string_at(id(3d_label.tostring())+20, 100*100*3)
image = pyglet.image.ImageData(100, 100, 'RGB', image_data, -100*3)

用 numpy 从 3 [100*100] 矩阵构建 [100*100*3] 矩阵有什么更好的方法吗?

最佳答案

我认为您正在寻找的是 np.dstack(或更一般地说,np.concatenate):

label255=label*255
label3=numpy.dstack((label255,label255,label255))

这表明 dstack 生成与您构造的 label_3d 相同的数组 (label3):

import numpy as np

label=np.random.random((100,100))
label255=label*255
label3=np.dstack((label255,label255,label255))

label_3d = np.empty([100,100,3])
label_3d[:,:,0] = label * 255            # value range of label is [0,1]
label_3d[:,:,1] = label * 255
label_3d[:,:,2] = label * 255
print(np.all(label3==label_3d))
# True

附言。我不确定,但您是否尝试过使用 label3.data 而不是 ctypes.string_at(id(label3.tostring())+20, 100*100*3) ?

关于python - 如何用pyglet显示一个numpy数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3165379/

相关文章:

Python - 替换多个文件中的数字

numpy - 计算 xarray 中每个网格点的百分位

python - numpy.minimum() 的返回类型?

python - Numpy:可以解析大小不等的多维数组吗?

python - Python游戏库Pygame和Pyglet的区别?

python - 无法编译 Google Protocol Buffer

python - Mysqldump 与 python

python - 如果任务失败,如何调用 "task"?

Python 视频框架

python-3.x - Pyglet hello world 示例在按下键之前不显示标签