создание изображения из двух отдельных массивов - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть выходной массив с формой (2, 6, 4), который будет представлять файл изображения (6x2 пикселей)

И у меня также есть один массив [x,y] координат и один массив [255,255,255] цвета значения для каждой из этих координат.

Как я могу заполнить выходной массив значениями цветов в правильных индексах, не используя al oop для итерации по каждому из них, чтобы выполнить sh this?

вот надуманный пример :

import numpy as np
from PIL import Image

xy_coordinates = np.array([[0,0], [1,0], [2,0], [3,0], [4,0], [5,0], [0,1], [1,1], [2,1], [3,1], [4,1], [5,1]])
colours = np.array([['255', '255', '255'], ['255', '255', '255'], ['255', '255', '255'], ['255', '255', '255'], ['255', '255', '255'], ['255', '255', '255'], ['255', '255', '255'], ['255', '255', '255'], ['255', '255', '255'], ['255', '255', '255'], ['255', '255', '255'], ['255', '255', '255']])

output_array = np.zeros([2, 6, 4], dtype=np.uint8)

# fill output_array with elements from colours array in correct indices
# at a loss :(

output_img = Image.fromarray(output_array)

Любая помощь приветствуется

Ответы [ 2 ]

0 голосов
/ 23 февраля 2020

Я думаю, это то, что вы хотите:

import numpy as np

# Create empty black output image
RGB = np.zeros((2, 6, 3), dtype=np.uint8)

# Coordinates of pixels to change
xy_coordinates = np.array([[0,0], [1,1], [0,4], [1,5]])

# Colours to change them to: Red, Green, Blue Yellow
colours = np.array([['255', '0', '0'], ['0', '255', '0'], ['0', '0', '255'], ['255', '255', '0']])

# Do all the entries
for i in range(len(colours)):
    RGB[xy_coordinates[i][0],xy_coordinates[i][1]] = colours[i]

enter image description here

Если вы хотите альфа-канал, вы можете легко добавить его впоследствии:

A = np.zeros((2,6),np.uint8)
RGBA = np.dstack((RGB,A))

Я считаю, что это эквивалентно целому for l oop, но я не уверен в себе:

out[xy_coordinates[:,0],xy_coordinates[:,1]] = colours[:]

Может быть, кто-то умнее меня, то есть @divakar или тысячи других, можете комментировать / уточнить?

0 голосов
/ 23 февраля 2020

Делает ли это то, что вы хотите?

output_array[:, :, 0] = colours[:, 0]
output_array[:, :, 1] = colours[:, 1]
output_array[:, :, 2] = colours[:, 2]
...