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

Cod*_*ead 15 python numpy image image-processing

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

image = Image.open('bn4.bmp')
nparray=np.array(image)
Run Code Online (Sandbox Code Playgroud)

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

for filename in listdir("BengaliBMPConvert"):
  if filename.endswith(".bmp"):
       -----------------
  else:
       continue
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*024 21

获取BMP文件列表

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

import glob
filelist = glob.glob('BengaliBMPConvert/*.bmp')
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您已经知道文件名,只需将它们放在一个序列中:

filelist = 'file1.bmp', 'file2.bmp', 'file3.bmp'
Run Code Online (Sandbox Code Playgroud)

将所有图像组合成一个numpy数组

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

x = np.array([np.array(Image.open(fname)) for fname in filelist])
Run Code Online (Sandbox Code Playgroud)

腌制一个numpy阵列

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

import pickle
pickle.dump( x, filehandle, protocol=2 )
Run Code Online (Sandbox Code Playgroud)

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

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

x.dump('file.npy')
Run Code Online (Sandbox Code Playgroud)

要从x文件中加载数组:

x = np.load('file.npy')
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅dumpload的numpy文档.

  • @tegan 非常好!谢谢。答案更新了“numpy.ndarray.dump”和“numpy.load”的信息。 (2认同)

2Ob*_*Obe 6

将 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]))
Run Code Online (Sandbox Code Playgroud)

类“numpy.ndarray”

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