2015-07-13 3 views
13

У меня есть около 200 изображений PNG в сером, сохраненных в каталоге, подобном этому.Импорт PNG-файлов в Numpy?

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

Я хочу, чтобы импортировать все PNG изображения в Numpy, а потом хотите применить к-средства для создания словаря патчей с помощью K-Means (scikit)

Кто-нибудь знает библиотека Питона, которая может загрузить эти изображения в numpy на лету?

ответ

11

Используя только SciPy, Glob и имеющий PIL установлен (pip install pillow), вы можете использовать метод 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

Согласно документу, scipy.misc.imread является устаревшим, начиная SciPy 1.0.0, и будут удалены в 1.2.0. Рассмотрим использование imageio.imread instead. См. the answer by Charles.

+0

Просто перейдите в 'glob.glob (" ./ train/*. Png ")' – pbu

+2

'scipy.misc.imread' устарел. См. Мой ответ ниже! – Charles

0

Я немного изменился, и он сработал, как это, сбрасывается в один массив, при условии, что все изображения имеют одинаковые размеры.

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

Отлично. Отличное решение «все-в-одном». Я сохранил изображения в np.array, но затем столкнулся с проблемой, поскольку массив имел (shape == (num_images) с каждым изображением (shape == (32,32,3)). Ваше решение (плюс 'im = np.reshape (num_images, 32,32,3) 'работает блестяще! :-) – SherylHohman

+0

typo: Мне даже не нужно переписывать вызов выше. В моем раздраженном хаке, массирование его в желаемую форму становилось грязным. прямой путь. – SherylHohman

9

Бит опоздал на вечеринку, но текущий ответ теперь устарел.

Согласно doc, scipy.misc.imread устарел, начиная с SciPy 1.0.0, и будет удален в 1.2.0. Вместо этого используйте вместо этого imageio.imread.

Пример:

import imageio 

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

Вы также можете использовать ImageIO для загрузки из причудливых источников:

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

Это также может быть сделано с Image класса 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()) 
Смежные вопросы