如何在Pygame / Python 2.7中在屏幕上呈现Gabor补丁?

时间:2016-04-06 12:28:42

标签: python python-2.7 pygame

我一直试图找出一种方法将Gabor补丁呈现在pygame的黑色背景上,并且一直在努力这样做。我通常可以独立完成每个元素 - 所以a)我可以出现黑色背景屏幕,b)我可以单独运行这一堆代码并获得一个Gabor补丁显示在它自己的单独屏幕上:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

size = np.linspace(-np.pi,np.pi,200)
xgrid, ygrid = np.meshgrid(size, size)

gaussian = np.exp(-(xgrid/2)**2-(ygrid/2)**2) 
sine = np.sin(xgrid*10)
gabor = sine * gaussian
plt.imshow(gabor,cm.gray) 
plt.show()

但我想要的是能够制作一个Gabor补丁出现在黑色Pygame屏幕本身的预定位置。我已经看过一些关于在Pygame中呈现图像的youtube教程,并尝试了以下方法(没有成功):

from win32api import GetSystemMetrics
import sys
import pygame
from pygame.locals import *
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import matplotlib.image as mpimg
import time
pygame.init()
Clock= pygame.time.Clock()
FPS =30
screenWidth=GetSystemMetrics(0)
screenHeight=GetSystemMetrics(1)
fullScreenSize=(screenWidth/2,screenHeight/2) 
gameDisplay=pygame.display.set_mode(fullScreenSize)
BLACK = (0,0,0)

while True:

for event in pygame.event.get():
    if event.type == pygame.QUIT or event.type == KEYUP:
            pygame.quit()


size = np.linspace(-np.pi,np.pi,200)
xgrid, ygrid = np.meshgrid(size, size)
gaussian = np.exp(-(xgrid/2)**2-(ygrid/2)**2) 
sine = np.sin(xgrid*10)  
gabor = sine * gaussian

x = ((screenWidth/2) * 0.3) #Left on the x-axis
y = ((screenHeight/2) * 0.45) #Mid-height on screen

#MY ATTEMPT TO SPECIFY A GABOR THAT IS TO BE PRESENTED ON THE LEFT SIDE OF THE SCREEN
def LeftGabor (x,y): 
gameDisplay.blit(gabor,(x,y))


gameDisplay.fill(BLACK)
gameDisplay.blit(gabor,(x,y))

LeftGabor(x,y)
pygame.display.update()
Clock.tick(FPS)

使用此代码,所有发生的事情都会弹出黑屏。没有其他的。有人可以指出我做错了什么,并指出我正确的方向?

1 个答案:

答案 0 :(得分:0)

你的gabor对象不是一个blittable对象。从我可以看出,它是一个具有每个坐标的共同点和值的数组,其中坐标从负pi到pi运行,并且每个方向有200个。你需要把它们映射到屏幕上,每一个都有一个点,用pygame.draw.line函数绘制它。