2011-05-05 6 views
6

Estoy escribiendo un algoritmo de procesamiento de imágenes iterativo en una secuencia de comandos (no quiero usar iPython), y me gustaría visualizar la imagen que genero después de cada iteración. Eso es muy fácil de hacer en Matlab, sin bloquear el hilo principal, pero estoy luchando para hacerlo en Python.Cómo mostrar una imagen con Pylab desde una secuencia de comandos sin bloqueo

En pylab el show() función está bloqueando y tengo que cerrar la ventana para continuar la ejecución de mi script. He visto que algunas personas usan la función de iones(), pero no tiene ningún efecto en mi caso, por ejemplo:

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

sigue bloqueando. También vi gente diciendo que "usar el dibujo en lugar de la trama" puede resolver esto. Sin embargo, no estoy usando la trama sino imshow/show, ¿hay algo que me falta aquí?

Por otro lado, el PIL también tiene algunas funciones de visualización, pero parece generar una imagen temporal y luego mostrarla con imagemagick, así que supongo que no hay manera de mostrar una imagen y actualizarla en la misma ventana con este método.

Estoy usando Ubuntu 10.10.

¿Alguien sabe cómo hacerlo simplemente, o tengo que empezar a usar algo como Qt para tener una GUI mínima que pueda actualizar fácilmente?

Respuesta

2

se puede tratar de enhebrar sus cosas 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

Esto no funciona para mí. En 'do your stuff', espero que se presione una tecla, pero cuando lo hago, el hilo no termina. Tienes que matar el proceso. – Alex

3

Trate de usar pylab.draw() en lugar de pylab.show().

pylab.show() iniciará un Tk mainloop, por lo tanto, está bloqueando. Mientras que pylab.draw() forzará un sorteo de figura en ese punto. Como está usando pylab.ion(), las figuras ya se han creado. Pero al final del script, debe colocar pylab.show(); de lo contrario, las cifras se cerrarán cuando el script finalice, ya que no hay un mainloop. Un efecto secundario es que no puede interactuar con las figuras hasta que llegue al pylab.show().

+0

gracias, su comentario de que 'usando pylab.ion(), las figuras ya se crearon 'ayudó a resolver mi problema. En otras palabras, es importante hacer esto * antes * de hacer un trazado, por lo que yo entiendo. –

Cuestiones relacionadas