2013-09-25 4 views

risposta

16

im forse column-major array mentre in NumPy sono row-major

fare in_data = in_data.T per trasporre la matrice pitone

probabilmente dovrebbe verificare in_data con s imshowmatplotlib' per assicurarsi che l'immagine sembra giusto.

Ma sai che matplotlib ha le proprie funzioni di caricamento che ti forniscono direttamente gli array di numpy? Vedere: http://matplotlib.org/users/image_tutorial.html

+0

'np.asarray (im, order = 'F')' è anche [possibile] (https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.asarray.html # numpy.asarray) –

5

Se l'immagine è fare in scala di grigi:

in_data = in_data.T 

ma se si sta lavorando con le immagini RBG si vuole assicurarsi che il proprio operazione di trasposizione è lungo solo due assi:

in_data = np.transpose(in_data, (1,0,2)) 
0

in realtà ciò è dovuto al fatto che la maggior parte delle librerie di immagini fornisce immagini trasposte rispetto agli array numpy. questo è (penso) perché scrivi file immagine riga per riga, quindi il primo indice (diciamo x) si riferisce al numero di riga (quindi x è l'asse verticale) e il secondo indice() si riferisce al pixel successivo in linea (quindi y è l'asse orizzontale), che è contro il nostro senso delle coordinate quotidiane.

Se si desidera gestire correttamente è necessario ricordare di scrivere:

image = library.LoadImage(path) 
array = (library.FromImageToNumpyArray(image)).T 

e di conseguenza:

image = library.FromNumpyArrayToImage(array.T) 
library.WriteImage(image, path) 

che funziona anche per le immagini in 3D. Ma non sto promettendo che questo è il caso di TUTTE le librerie di immagini - solo queste con cui ho lavorato.