Я сравниваю уменьшенные изображения, показывая их рядом, используя Image.fromarray(np.haystack(<list of image array>).show()
. Проблема в том, что массивы изображений имеют разные размеры. Мое решение состоит в том, чтобы заполнить массив серым фоном (200, 200, 200) и сделать все массивы равными по размеру 200x200.
Мой вопрос: есть ли у numpy более прямой способ сделать это?
Мое решение:
def pad_with_gray_backgound(_array, size):
array_padded = np.ones((size, size, 3), dtype=np.uint8)*200
for i in range(array_padded.shape[0]):
for j in range(array_padded.shape[1]):
try:
array_padded[i, j] = _array[i, j]
except IndexError:
pass
return array_padded
и для вызова этой функции
import numpy as np
from PIL import Image
image_arrays = []
for pic in pic_selection:
pic_thumbnail = io.BytesIO(pic.thumbnail.encode('ISO-8859-1'))
padded_image_array = pad_with_gray_background(
np.array(Image.open(pic_thumbnail)), 200)
image_arrays.append(padded_image_array)
Image.fromarray(np.hstack(image_arrays)).show()
note pic.thumbnail - это байтовый объект, взятый из exif