2013-09-25 9 views

Odpowiedz

16

im może kolumn-major podczas gdy tablice w numpy są row-major

zrobić in_data = in_data.T celu transpozycję tablicę Python

prawdopodobnie powinien sprawdzić in_data z matplotlib „s imshow aby upewnić się, że obraz wygląda dobrze.

Ale czy wiesz, że matplotlib ma swoje własne funkcje ładowania, które dają bezpośrednio numpy tablic? Zobacz: http://matplotlib.org/users/image_tutorial.html

+0

'np.asarray (im, order = 'F')' jest również [możliwe] (https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.asarray.html # numpy.asarray) –

5

Jeśli obraz jest skala szarości Do:

in_data = in_data.T 

ale jeśli pracujesz z RBG obrazów chcesz upewnić się, że operacja transpozycja jest po zaledwie dwóch osi:

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

Dzieje się tak, ponieważ większość bibliotek obrazów dostarcza obrazów, które są transpozowane w porównaniu do tablic numpy. jest to (myślę), ponieważ piszesz pliki obrazów wiersz po linii, więc pierwszy indeks (powiedzmy x) odnosi się do numeru linii (czyli x jest osią pionową), a drugi indeks (y) odnosi się do kolejnego piksela w line (czyli y jest osią poziomą), co jest sprzeczne z naszym codziennym wymiarem współrzędnych.

Jeśli chcesz obsługiwać go poprawnie trzeba pamiętać, aby napisać:

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

aw konsekwencji:

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

który działa również w przypadku obrazów 3D. Ale nie obiecuję, że tak jest w przypadku WSZYSTKICH bibliotek obrazów - tylko te, z którymi pracowałem.