2016-04-06 147 views
-1

我一直在想辦法將python上的Gabor補丁呈現在黑色背景上,並且一直在努力。我一般能獨立做的每一個元素 - 所以)我可以做一個黑色的背景屏幕出現,和b)我可以單獨運行這一串代碼,讓加博補丁出現在其自己單獨的屏幕上:如何在Pygame/Python 2.7中的屏幕上顯示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屏幕本身的預定位置。我看過一些YouTube的教程在Pygame的呈現圖像,並曾嘗試以下方法(沒有成功):

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) 

使用此代碼,所發生的一切是一個黑色的屏幕上彈出。沒有其他的。有人能指出我做錯了什麼,並指出我朝着正確的方向嗎?

+0

-1:你的代碼沒有格式化(縮進),很難閱讀並且包含很多不相關的信息。你確實可以在pygame中渲染numpy數組,有關於如何做的一些類似的問題,請參閱例如[我的答案在這裏](http://stackoverflow.com/questions/14206938/combine-numpy-arrays-by-reference/36535866#36535866) –

回答

0

你的gabor對象不是一個blittable對象。從我可以弄明白的是,它是一個數組,其中每個co-ordinte具有共同的值和值,其中座標從負的pi到pi,並且每個方向上有200個座標。你需要把它們映射到屏幕上,並且每個地方都有一個點,用pygame.draw.line函數繪製它。