使用python,如何在窗口中显示RGB值矩阵?

时间:2016-04-20 16:51:54

标签: python pygame

我为图像计算了一个RGB三元组矩阵,我想知道在交互式窗口中显示它们的最直接的技术。我怀疑pygame会参与其中。将优先考虑最小化pip使用的技术。

result = numpy.zeros([height,width, 3], dtype=numpy.uint8)
pyopencl.enqueue_copy(queue, result, result_g).wait()

surface = pygame.display.set_mode((width, height), pygame.DOUBLEBUF)
# now what?

2 个答案:

答案 0 :(得分:0)

如果不知道你所展示的代码是什么,很难准确回答,但是这样的话:

for c in range(width):
   for d in range(height):
      color = result(d,c)
      pygame.draw.line(surface, color, (c,d),(c+1,d))

答案 1 :(得分:0)

我能够解决的问题是:

result = numpy.zeros([height,width, 3], dtype=numpy.uint8)
pyopencl.enqueue_copy(queue, result, result_g).wait()

surface = pygame.display.set_mode((width, height), pygame.DOUBLEBUF)
rgb2 = numpy.transpose(rgb, (1,0,2))          
pygame.pixelcopy.array_to_surface(surface, rgb2)
pygame.display.flip()

转置只是必要的,因为我的opencl内核计算了排列为result[y,x,:] = (r,g,b)的图像,而array_to_surface需要result[x,y,:](这与大多数帧缓冲区的工作方式相反)。如果我想避免转置,我可以改变我的opencl内核以按列主顺序存储内容。

此解决方案仅适用,因为我的表面尺寸与我的图像完全相同。当表面和像素矩阵的尺寸不同时,我会推荐任何其他有用的解决方案(因为在搜索时会有人发现这篇文章)。