编程语言
首页 > 编程语言> > python – 如何使用pyglet显示numpy数组?

python – 如何使用pyglet显示numpy数组?

作者:互联网

我有一个尺寸为(100 * 100)的标签矩阵,存储为numpy数组,我想用pyglet显示矩阵.

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

任何人都有任何想法?

PS.我目前的解决方案

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)

有没有更好的方法从3 [100 * 100]矩阵构造一个[100 * 100 * 3]矩阵与numpy?

解决方法:

我认为你要找的是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

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

标签:python,numpy,pyglet
来源: https://codeday.me/bug/20190606/1190435.html