Ich arbeite an einem Computer Vision Algorithmus und ich möchte zeigen, wie sich ein numpliges Array in jedem Schritt ändert.Wie matplotlib's imshow() Fenster interaktiv aktualisieren?
Was jetzt funktioniert ist, dass, wenn ich eine einfache imshow(array)
am Ende meines Codes habe, das Fenster angezeigt wird und das endgültige Bild zeigt.
Allerdings möchte ich das Imshow-Fenster aktualisieren und anzeigen, wie sich das Bild in jeder Iteration ändert.
zum Beispiel Also würde ich tun:
import numpy as np
import matplotlib.pyplot as plt
import time
array = np.zeros((100, 100), np.uint8)
for i in xrange(0, 100):
for j in xrange(0, 50):
array[j, i] = 1
#_show_updated_window_briefly_
plt.imshow(array)
time.sleep(0.1)
Das Problem ist, dass diese Art und Weise, die Matplotlib Fenster nicht aktiviert bekommen, nur einmal die ganze Berechnung abgeschlossen ist.
Ich habe sowohl native Matplotlib und Pyplot ausprobiert, aber die Ergebnisse sind die gleichen. Zum Plotten von Befehlen habe ich einen .ion()
Schalter gefunden, aber hier scheint es nicht zu funktionieren.
Q1. Was ist der beste Weg, Updates für ein numpy Array (eigentlich ein Uint8 Graustufenbild) kontinuierlich anzuzeigen?
Q2. Ist es möglich, dies mit einer Animationsfunktion zu tun, wie in der dynamic image example? Ich würde gerne eine Funktion innerhalb einer Schleife aufrufen, daher weiß ich nicht, wie ich das mit einer Animationsfunktion erreichen soll.
Es kann davon abhängen, welches Backend Sie verwenden, sondern versuchen, mindestens eine 'show() aufrufen' oder 'ziehen()' vor Starten Sie Ihre Schleife - Siehe hierzu [Antwort] (http://stackoverflow.com/questions/2130913/no-plot-window-in-matplotlib). – Bonlenfum