2015-07-13 29 views
13

Tôi có khoảng 200 hình ảnh PNG xám được lưu trữ trong một thư mục như thế này.Nhập tệp PNG vào Numpy?

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

Tôi muốn nhập khẩu tất cả các hình ảnh PNG vào numpy và sau đó muốn áp dụng k-means để tạo ra một từ điển của các bản vá lỗi sử dụng k-means (scikit)

Không ai biết một thư viện python mà có thể tải những hình ảnh này vào trong một vụn vặt?

Trả lời

11

Sử dụng chỉ scipy, glob và có PIL cài đặt (pip install pillow) bạn có thể sử dụng phương pháp scipy của imread:

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 

CẬP NHẬT

Theo doc, scipy.misc.imread bị phản đối bắt đầu scipy 1.0.0, và sẽ bị xóa trong phiên bản 1.2.0. Cân nhắc sử dụng imageio.imread instead. Xem the answer by Charles.

+0

Chỉ cần thay đổi thành 'glob.glob (" ./ train/*. Png ")' – pbu

+2

'scipy.misc.imread' không được dùng nữa. Xem câu trả lời của tôi dưới đây! – Charles

0

Tôi đã thay đổi một chút và nó hoạt động như thế này, được đưa vào một mảng duy nhất, miễn là tất cả các hình ảnh có cùng kích thước.

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

Hoàn hảo. Giải pháp tất cả trong một tuyệt vời. Tôi đã lưu trữ hình ảnh vào một np.array, nhưng sau đó chạy vào rắc rối như mảng có (hình dạng == (num_images,) với mỗi hình ảnh (hình dạng == (32,32,3)). Giải pháp của bạn (cộng với 'im = np.reshape (num_images, 32,32,3) 'hoạt động rực rỡ! :-) – SherylHohman

+0

typo: Tôi thậm chí không cần cuộc gọi định hình lại ở trên.Trong mexed hack của tôi, xoa bóp nó vào hình dạng mong muốn đã nhận được lộn xộn. con đường trực tiếp. – SherylHohman

9

Bit trễ cho bữa tiệc, nhưng câu trả lời hiện tại không được chấp nhận.

Theo số doc, scipy.misc.imread không được dùng nữa, bắt đầu từ SciPy 1.0.0 và sẽ bị xóa trong phiên bản 1.2.0. Thay vào đó, hãy cân nhắc sử dụng imageio.imread.

Ví dụ:

import imageio 

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

Bạn cũng có thể sử dụng ImageIO để tải từ các nguồn ưa thích:

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

này cũng có thể được thực hiện với lớp Image của 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())