2015-07-13 13 views
13

Ho circa 200 immagini PNG in scala di grigi memorizzate in una directory come questa.Importazione di file PNG in Numpy?

1.png 
2.png 
3.png 
... 
... 
200.png 

voglio importare tutte le immagini PNG in Numpy e poi desidera applicare k-mezzo per produrre un dizionario di patch usando k-means (scikit)

Qualcuno sa una libreria Python che potrebbe caricare queste immagini in modo disordinato su una mosca?

risposta

11

Usando solo SciPy, glob e avendo PIL installato (pip install pillow) è possibile utilizzare il metodo di imread SciPy:

from scipy import misc 
import glob 

for image_path in glob.glob("/home/adam/*.png"): 
    image = misc.imread(image_path) 
    print image.shape 
    print image.dtype 

UPDATE

Secondo il documento, scipy.misc.imread è deprecato a partire SciPy 1.0.0, e sarà rimosso in 1.2.0. Prendi in considerazione l'utilizzo di imageio.imread instead. Vedi the answer by Charles.

+0

Basta cambiare in 'glob.glob (" ./ treno/*. Png ")' – pbu

+2

'scipy.misc.imread' è deprecato. Guarda la mia risposta qui sotto! – Charles

0

Ho cambiato un po 'e ha funzionato in questo modo, scaricato in un unico array, purché tutte le immagini abbiano le stesse dimensioni.

png = [] 
for image_path in glob.glob("./train/*.png"): 
    png.append(misc.imread(image_path))  

im = np.asarray(png) 

print 'Importing done...', im.shape 
+0

Perfetto. Ottima soluzione multifunzione. Ho memorizzato le immagini in un np.array, ma poi ho avuto dei problemi con l'array (shape == (num_images,) con ogni immagine (shape == (32,32,3)). La tua soluzione (più 'im = np.reshape (num_images, 32,32,3) 'funziona brillantemente! :-) – SherylHohman

+0

typo: Non ho nemmeno bisogno della chiamata di rimodellamento sopra. Nella mia hack irritata, massaggiandola in quella forma desiderata stava diventando disordinata. il percorso diretto. – SherylHohman

9

Bit in ritardo per la parte, ma la risposta corrente è ora deprecata.

Secondo lo doc, scipy.misc.imread è deprecato a partire da SciPy 1.0.0 e verrà rimosso in 1.2.0. Potresti utilizzare invece imageio.imread.

Esempio:

import imageio 

im = imageio.imread('my_image.png') 
print(im.shape) 

È inoltre possibile utilizzare ImageIO per caricare da fonti di fantasia:

im = imageio.imread('http://upload.wikimedia.org/wikipedia/commons/d/de/Wikipedia_Logo_1.0.png') 
3

questo può essere fatto anche con la classe Image del PIL library:

from PIL import Image 
import numpy as np 

im_frame = Image.open(path_to_file + 'file.png') 
np_frame = np.array(im_frame.getdata())