我想在一个数组中加载多张图片。
我在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方法,那么它仅是一个维度,我认为我无法恢复它们。
有人知道如何做到这一点,以便可以使用此数组吗? 谢谢!
答案 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
的列表中