конвертирование цветов формата RGB в XYZ
Имеется задача конвертирования цветов. Мне необходимо добиться того результата, что выдает сайт:
https://colorscheme.ru/color-converter.html
Предположим, что есть цвет формата
RGB = [0, 2, 100],
необходимо перевести его в
XYZ = [2, 1, 12]
Цветовая модель XYZ (CIE 1931 XYZ) является чисто математическим пространством. В отличие от RGB, CMYK, и других моделей, в XYZ основные компоненты являются «мнимыми», то есть вы не можете соотнести X, Y, и Z с каким-либо набором цветов для смешивания. XYZ является мастер-моделью практически всех остальных цветовых моделей, используемых в технических областях.
Как это сделать?
Ответы (2 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
import numpy as np
import colour # pip install colour-science
RGB = np.array([0, 2, 100])
XYZ = colour.sRGB_to_XYZ(RGB / 255)
print(XYZ)
print([ round(i*100) for i in XYZ.tolist()])
Автор решения: Max Gacrux
→ Ссылка
Вот мое решение:
def funXYZ(RGB):
var_R = (RGB[0] / 255)
var_G = (RGB[1] / 255)
var_B = (RGB[2] / 255)
if var_R > 0.04045:
var_R = ((var_R + 0.055) / 1.055) ** 2.4
else:
var_R = var_R / 12.92
if var_G > 0.04045:
var_G = ((var_G + 0.055) / 1.055) ** 2.4
else:
var_G = var_G / 12.92
if var_B > 0.04045:
var_B = ((var_B + 0.055) / 1.055) ** 2.4
else:
var_B = var_B / 12.92
X = (var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805) * 100
Y = (var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722) * 100
Z = (var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505) * 100
return X, Y, Z