如何在numpy数组中加载多个图像?

时间:2016-08-28 19:43:07

标签: python image numpy image-processing

如何在numpy数组中的目录中加载多个图像的像素。我已经在一个numpy数组中加载了一个图像。但无法弄清楚如何从目录加载多个图像。这是我到目前为止所做的事情

image = Image.open('bn4.bmp')
nparray=np.array(image)

这会加载32 * 32矩阵。我想在一个numpy数组中加载100个图像。我想制作100 * 32 * 32大小的numpy阵列。我怎样才能做到这一点 ?我知道结构看起来像这样

for filename in listdir("BengaliBMPConvert"):
  if filename.endswith(".bmp"):
       -----------------
  else:
       continue

但是无法找到如何在numpy数组中加载图像

3 个答案:

答案 0 :(得分:19)

获取BMP文件列表

要从目录BengaliBMPConvert获取BMP文件列表,请使用:

import glob
filelist = glob.glob('BengaliBMPConvert/*.bmp')

另一方面,如果您已经知道文件名,只需将它们按顺序放置:

filelist = 'file1.bmp', 'file2.bmp', 'file3.bmp'

将所有图像合并为一个numpy数组

将所有图像合并为一个数组:

x = np.array([np.array(Image.open(fname)) for fname in filelist])

腌制一个numpy数组

使用pickle将numpy数组保存到文件:

import pickle
pickle.dump( x, filehandle, protocol=2 )

其中x是要保存的numpy数组,filehandle是pickle文件的句柄,例如open('filename.p', 'wb')protocol=2告诉pickle使用其当前格式而不是一些古老的过时格式。

或者,可以使用numpy提供的方法(帽子提示:tegan)来腌制numpy数组。要在文件x中转储数组file.npy,请使用:

x.dump('file.npy')

从文件中重新加载数组x

x = np.load('file.npy')

有关详细信息,请参阅dumpload的numpy文档。

答案 1 :(得分:1)

将OpenCV的imread()函数与os.listdir()一起使用,例如

import numpy as np
import cv2
import os

instances = []

# Load in the images
for filepath in os.listdir('images/'):
    instances.append(cv2.imread('images/{0}'.format(filepath),0))

print(type(instances[0]))
  

类'numpy.ndarray'

这将返回一个列表(== {instances),其中存储了图像的所有灰度值。对于彩色图像,只需设置.format(filepath),1

答案 2 :(得分:0)

我只想分享两个可以将数据集分为训练集,测试集和验证集的站点:split_folder 并由 muskulpesent

从驻留在各个文件夹code snippet from medium 中的图像中创建numpy数组