我为图像计算了一个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?
答案 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内核以按列主顺序存储内容。
此解决方案仅适用,因为我的表面尺寸与我的图像完全相同。当表面和像素矩阵的尺寸不同时,我会推荐任何其他有用的解决方案(因为在搜索时会有人发现这篇文章)。