Как отобразить изображение с помощью Pylab из сценария неблокирующим способом - PullRequest
6 голосов
/ 05 мая 2011

Я пишу некоторый алгоритм итеративной обработки изображений в сценарии (я не хочу использовать iPython), и я хотел бы визуализировать изображение, которое я генерирую после каждой итерации. Это очень легко сделать в Matlab, не блокируя основной поток, но я изо всех сил пытаюсь сделать это в Python.

В pylab функция show () блокируется, и мне нужно закрыть окно, чтобы продолжить выполнение моего скрипта. Я видел, что некоторые люди используют функцию ion (), но в моем случае она не действует, например:

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

все еще блокирует. Я также видел людей, которые говорили, что «использование рисования вместо сюжета» может решить эту проблему. Тем не менее, я не использую сюжет, а imshow / show, есть что-то, что мне здесь не хватает?

С другой стороны, PIL также имеет некоторые функции отображения, но, похоже, он генерирует временное изображение, а затем отображает его с помощью imagemagick, поэтому я предполагаю, что здесь нет способа отобразить изображение и обновите его в том же окне этим методом.

Я использую Ubuntu 10.10.

Кто-нибудь знает, как это сделать просто, или я должен начать использовать что-то вроде Qt, чтобы иметь минимальный графический интерфейс, который я могу легко обновить?

Ответы [ 2 ]

3 голосов
/ 19 июля 2011

Попробуйте использовать pylab.draw() вместо pylab.show().

pylab.show() запустит основной цикл Tk, следовательно, он блокируется. Принимая во внимание, что pylab.draw() вызовет ничью фигуры в этой точке. Поскольку вы используете pylab.ion(), фигуры уже созданы. Но в конце сценария вы должны поставить pylab.show(), иначе цифры будут закрыты, когда сценарий завершится, так как нет основной петли. Одним из побочных эффектов является то, что вы не можете взаимодействовать с фигурами, пока не достигнете pylab.show().

2 голосов
/ 05 мая 2011

Вы можете попытаться нарезать нить на своем пилабе:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...