Рассмотрим этот тривиальный пример с тремя цветами (красным, синим и зеленым):
layers = {
'red': np.random.rand(100, 100),
'blu': np.random.rand(100, 100),
'grn': np.random.rand(100, 100)
}
# Express composite as 3-channel RGB data
composite_arr = np.zeros(shape=(100, 100, 3))
# For each channel red, blue, and green, insert the data for the corresponding layer
composite_arr[:, :, 0] = layers['red']
composite_arr[:, :, 1] = layers['blu']
composite_arr[:, :, 2] = layers['grn']
# Finally, output the image expressed in RGB
composite_img = Image.fromarray(np.array(composite_arr * 255, dtype=np.uint8), mode="RGB")
composite_img.save('test.png')
Теперь, вместо приведенного выше примера, давайте попробуем это со списком, содержащим четыре слоя:
layers = [
np.random.rand(100, 100),
np.random.rand(100, 100),
np.random.rand(100, 100),
np.random.rand(100, 100)
}
Допустим, мы выбрали четыре тетрадных цвета в пространстве RGB, чтобы применить один к каждому слою:
colors = {
(1, 0, 0),
(0, 1, 1),
(0, 0, 1),
(1, 1, 0)
}
Как я могу аналогичным образом создать композит для четырех слоев в приведенном выше примере?
А как насчет любого количества слоев и цветов?
Я ищу обобщенное выражение, которое можно последовательно применить к composite_arr
, которое обновит его для любого количества слоев и цветов.
В качестве альтернативы, если это можно сделать эффективно, используя PIL
или аналогичная библиотека для раскрашивания каждого слоя и применения некоторой составной функции, пожалуйста, предложите, как это можно сделать.
Спасибо!
Редактировать: Чтобы уточнить, я хотел быконечный результат должен быть выражен в пространстве RGB.Таким образом, любое количество слоев должно соответствовать этому (следуя приведенным выше примерам изображений 100x100):
composite_arr = np.zeros(shape=(100, 100, 3))