如何在阵列中加载多张图片

时间:2019-07-03 18:16:05

标签: python numpy

我想在一个数组中加载多张图片。 我在Pillow库中进行了尝试,并使用了以下代码:

image_parrot = Image.open("picturesready\\parrot\\" + photos_parrot[i]).convert("RGB")
image_numpy_parrot = numpy.append(image_numpy_parrot , numpy.asarray(image_parrot))

但是,如果我使用Numpy中的shape方法,那么它仅是一个维度,我认为我无法恢复它们。

有人知道如何做到这一点,以便可以使用此数组吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您想创建一维鹦鹉图片的数组,其中数组的每个元素都是形状为(3, n_pix_wide, n_pix_high)的N-D数组。要创建每个元素,请执行以下操作:

#! /user/bin/env python
from PIL import Image
import numpy as np

im = Image.open('/Users/medley/Downloads/parrot.jpg', 'r').convert('RGB')
width, height = im.size

print(width, height)

rgb = np.ndarray(shape=(3, width, height))
print(rgb.shape)
for x in range(width):
    for y in range(height):
        r, g, b = im.getpixel((x, y))
        rgb[0, x, y] = r
        rgb[1, x, y] = g
        rgb[2, x, y] = b

print(rgb)
print(rgb.shape)

然后,您可以将其放入函数中并获取返回值,并将其附加到图片的一维数组中。像这样

#! /user/bin/env python
from PIL import Image
import numpy as np

def get_rgb_array(image_path):
    im = Image.open(image_path, 'r').convert('RGB')
    width, height = im.size
    rgb = np.ndarray(shape=(3, width, height))
    for x in range(width):
        for y in range(height):
            r, g, b = im.getpixel((x, y))
            rgb[0, x, y] = r
            rgb[1, x, y] = g
            rgb[2, x, y] = b
    return rgb

images = ['parrot1.jpg', 'parrot2.jpg']
rgb_images = []
for path in images:
    print("Analyzing {}".format(path))
    rgb = get_rgb_array(path)
    rgb_images.append(rgb)
    _, width, height = rgb.shape
    print("{} was {} wide and {} tall".format(path, width, height))

print(rgb_images)

由于您没有指定要生成的numpy数组的尺寸,因此我只是将每个(3, n_pix_width, n_pix_high)数组追加到名为rgb_images的列表中