Создайте изображение в подушке с помощью Numpy матрицы цветов - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь создать некоторые "абстрактные" изображения из некоторых данных. У меня есть матрица numpy со строками значений RGB:

[[158.3843526 173.15808009 99.35181516], [133.06784447 119.41070161 95.89276837], [150.15054271 150.09915693 129.7414471], [170.31807292 153.84166341 126.4784592]]

В настоящее время я импортирую массив и вычисляю, сколько значений используется: colors.shape[0]

Затем делю число значений в 1920 (я пытаюсь создать изображения 1920x1080), используя: segment = int((1920/colors.shape[0]))

Для создания фактического изображения я использую подушку и следующий код: img = Image.new('RGB', (segment, 1080), color=(int(colors.item((0, 0))), int(colors.item((0, 1))), int(colors.item((0, 2)))))

Я тогда сохранение этого изображения с помощью: img.save('pil_color.png')

Этот код работает, как и ожидалось, создавая изображение с первым значением RGB, я хочу изменить свой код, чтобы заполнить изображение всеми значениями RGB в матрице. Как изменить код подушки, чтобы создать полосатое четное изображение со всеми значениями в матрице?

Вот полный код:

segment = int((1920/colors.shape[0]))
img = Image.new('RGB', (segment, 1080), color=(int(colors.item((3, 0))), int(colors.item((3, 1))), int(colors.item((3, 2)))))
img.save('image.png')

ОБНОВЛЕНИЕ:

Вот код, который у меня сейчас есть, который генерирует полосы из матрицы, но я пока не могу их правильно скомбинировать, все, что я получаю - это черное изображение 1920x1080.

segment = int((1920/colors.shape[0]))
for i in range(colors.shape[0]):
    img = Image.new('RGB', (segment, 1080), color=(int(colors.item((i, 0))), int(colors.item((i, 1))), int(colors.item((i, 2)))))
    img.save(old + "/strips/" + 'image' + str(i) + '.png')

images = []
for filename in glob.glob(old + '/strips/*.png'):
    im = Image.open(filename)
    images.append(im)

widths, heights = zip(*(i.size for i in images))

total_width = sum(widths)
max_height = max(heights)

new_im = Image.new('RGB', (total_width, max_height))

x_offset = 0
for im in images:
    new_im.paste(im, (x_offset, 0))
    x_offset += im.size[0]

new_im.save(old + "/" + str(query) + str(num) + '.jpg')
...