2011-05-05 30 views
6

Tôi đang viết một số thuật toán xử lý hình ảnh lặp lại trong tập lệnh (Tôi không muốn sử dụng iPython) và tôi muốn hình dung hình ảnh tôi tạo sau mỗi lần lặp. Điều đó rất dễ thực hiện trong Matlab, mà không chặn luồng chính, nhưng tôi đang cố gắng làm điều đó bằng Python.Cách hiển thị hình ảnh với Pylab từ tập lệnh theo cách không chặn

Trong pylab, hiển thị() chức năng đang chặn và tôi cần đóng cửa sổ để tiếp tục thực thi tập lệnh của mình. Tôi đã thấy rằng một số người sử dụng hàm ion(), nhưng nó không có tác dụng trong trường hợp của tôi, ví dụ:

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

vẫn đang chặn. Tôi cũng thấy mọi người nói rằng "sử dụng vẽ thay vì cốt truyện" có thể giải quyết vấn đề này. Tuy nhiên, tôi không sử dụng cốt truyện nhưng imshow/show, có cái gì đó mà tôi đang thiếu ở đây? Mặt khác, PIL cũng có một số chức năng hiển thị, nhưng có vẻ như tạo ra một hình ảnh tạm thời và sau đó hiển thị nó bằng hình ảnh tưởng tượng, vì vậy tôi cho rằng không có cách nào để hiển thị hình ảnh và cập nhật nó trong cùng một cửa sổ với phương thức này.

Tôi đang sử dụng Ubuntu 10.10.

Có ai biết làm thế nào để làm điều đó một cách đơn giản, hoặc tôi phải bắt đầu sử dụng một cái gì đó như Qt để có một GUI tối thiểu mà tôi có thể cập nhật dễ dàng?

Trả lời

2

bạn có thể thử cho chủ đề thứ pylab của bạn:

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

Điều này không hiệu quả đối với tôi. Trong 'làm công cụ của bạn' Tôi chờ đợi một phím bấm, nhưng khi tôi làm như vậy các chủ đề không kết thúc. Phải giết quá trình. – Alex

3

Hãy thử sử dụng pylab.draw() thay vì pylab.show().

pylab.show() sẽ bắt đầu một vòng lặp Tk, do đó nó đang chặn. Trong khi đó, pylab.draw() sẽ bắt buộc vẽ hình tại điểm đó. Vì bạn đang sử dụng pylab.ion(), các số liệu đã được tạo. Nhưng ở cuối kịch bản, bạn phải đặt pylab.show() nếu không, các số liệu sẽ bị đóng khi tập lệnh kết thúc vì không có vòng lặp chính. Một tác dụng phụ là, bạn không thể tương tác với các số liệu cho đến khi bạn đạt đến pylab.show().

+0

cảm ơn, bình luận của bạn rằng 'bằng cách sử dụng pylab.ion(), con số được tạo ra đã' đã giúp giải quyết vấn đề của tôi. Nói cách khác, điều quan trọng là làm điều này * trước khi * làm bất kỳ âm mưu nào theo như tôi đã hiểu. –

Các vấn đề liên quan