Sto lavorando su un algoritmo di visione artificiale e mi piacerebbe mostrare come una matrice numpy cambia in ogni passaggio.Come aggiornare la finestra imshow() di matplotlib in modo interattivo?
Ciò che funziona ora è che se ho un semplice imshow(array)
alla fine del mio codice, la finestra visualizza e mostra l'immagine finale.
Tuttavia, ciò che mi piacerebbe fare è aggiornare e visualizzare la finestra di anteprima mentre l'immagine cambia in ogni iterazione.
Così, per esempio mi piacerebbe fare:
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)
Il problema è che in questo modo, la finestra Matplotlib non si attivano, solo una volta l'intero calcolo è finito.
Ho provato sia matplotlib nativo che pyplot, ma i risultati sono gli stessi. Per i comandi di tracciamento ho trovato uno switch .ion()
, ma qui non sembra funzionare.
Q1. Qual è il modo migliore per visualizzare continuamente gli aggiornamenti su una matrice numpy (in realtà un'immagine in scala di grigi uint8)?
Q2. È possibile farlo con una funzione di animazione, come nel dynamic image example? Mi piacerebbe chiamare una funzione all'interno di un ciclo, quindi non so come ottenere ciò con una funzione di animazione.
Può dipendere da quale backend si utilizza, ma provare a chiamare almeno un 'show()' o 'draw()' prima Avvio del ciclo - Vedi questo [risposta] (http://stackoverflow.com/questions/2130913/no-plot-window-in-matplotlib). – Bonlenfum