2011-05-05 52 views
6

我正在寫一些迭代圖像處理算法在腳本(我不想使用iPython),並且我想將我在每次迭代後生成的圖像。這在Matlab中很容易實現,不會阻塞主線程,但我正努力在Python中完成它。如何使用Pylab從腳本以非阻塞的方式顯示圖像

在pylab中顯示()函數被阻塞,我需要關閉窗口才能繼續執行我的腳本。我看到一些人使用離子()函數,但它沒有任何效果在我的情況下,例如:

pylab.ion() 
img = pylab.imread('image.png') 
pylab.imshow(img) 
pylab.show() 

仍然阻擋。我也看到有人說「用繪畫而不是情節」可以解決這個問題。但是,我不使用情節,但imshow /顯示,有什麼我在這裏失蹤?

在另一方面,PIL也有一些顯示器的功能,但它似乎產生一個臨時的圖像,然後用ImageMagick的顯示,所以我認爲這裏沒有辦法來顯示圖像,並更新了它與此方法相同的窗口。

我使用的是Ubuntu 10.10。

有沒有人知道如何簡單地做到這一點,還是我必須開始使用類似Qt的東西來擁有一個可以輕鬆更新的最小GUI?

回答

2

你可以嘗試線程您pylab東西:

import pylab 
import threading 

pylab.ion() 
img = pylab.imread('map.png') 

def create_show(): 
    pylab.imshow(img) 
    pylab.show() 

thread = threading.Thread(target=create_show) 
thread.start() 

#do your stuff 

thread.join() 
+0

這對我不起作用。在做'你的東西'我等待按鍵,但是當我這樣做線程不會結束。必須殺死這個過程。 – Alex 2012-12-11 22:01:18

3

嘗試使用的pylab.draw()代替pylab.show()

pylab.show()將啓動一個Tk主循環,因此它阻塞。而pylab.draw()將強制在這一點上的數字繪製。由於您使用的是pylab.ion(),因此已經創建了數字。但在腳本結尾處,您必須放置一個pylab.show()否則數字將在腳本結束時關閉,因爲沒有主循環。一個副作用是,你不能與數字交互,直到你達到pylab.show()

+0

謝謝,您使用pylab.ion()創建數字已經解決了我的問題。換句話說,根據我的理解,在做任何繪圖之前做這件事很重要。 – 2011-09-14 22:06:01