【问题标题】:How to load multiple images in a numpy array ?如何在 numpy 数组中加载多个图像?
【发布时间】:2017-01-04 19:51:24
【问题描述】:

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

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 数组中加载图像

【问题讨论】:

    标签: python image numpy image-processing


    【解决方案1】:

    获取 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 使用它当前的格式,而不是一些古老的out-of -日期格式。

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

    x.dump('file.npy')
    

    从文件中加载数组x

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

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

    【讨论】:

    • 非常感谢。有效 。如果您不介意,我可以将这个 numpy 数组加载到 pickle 中吗?
    • x 是numpy数组(例如答案中所示)。 filehandle 是 pickle 文件的句柄,例如 open('filename.p', 'wb')protocol=2 只是告诉 pickle 使用其当前格式而不是一些古老的过时格式。
    • @omatai 是的,它非常有用。它被称为列表理解。由于我没有任何关于该主题的最喜欢的教程,我将提供this link,它将引导您获得大量信息。
    • 你不必导入pickle来保存numpy数组; numpy 可以自己做到这一点(我认为它无论如何都使用pickle,但为您节省了导入/担心协议):myarray.dump("good_filename.npy") 如果您愿意,这可以让您在一行中完成整个事情:np.array([np.array(Image.open(fname)) for fname in filelist]).dump("good_filename.npy")
    • @tegan 非常好!谢谢。答案更新为numpy.ndarray.dumpnumpy.load 的信息。
    【解决方案2】:

    将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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-21
        • 1970-01-01
        • 1970-01-01
        • 2015-05-21
        • 2020-06-05
        • 2021-10-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多