Преобразование RGB в xyY с помощью colormath
С помощью colormath я конвертирую значение RGB в значение xyY. Он отлично работает для 1 значения RGB, но я не могу найти правильный код для преобразования нескольких значений RGB, импортированных из Excel. Я использую следующий код:
from colormath.color_objects import sRGBColor, xyYColor
from colormath.color_conversions import convert_color
import pandas as pd
data = pd.read_excel(r'C:/Users/User/Desktop/Color/Fontane/RGB/FontaneHuco.xlsx')
df = pd.DataFrame(data, columns=['R', 'G', 'B'])
#print(df)
rgb = sRGBColor(df['R'],df['G'],df['B'], is_upscaled=True)
xyz = convert_color(rgb, xyYColor)
print(xyz)
Но когда я запускаю этот код, я получаю следующую ошибку:
Traceback (most recent call last):
File "C:\Users\User\PycharmProjects\pythonProject4\Overige\Chroma.py", line 9, in <module>
lab = sRGBColor(df['R'], df['G'], df['B'])
File "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\site-packages\colormath\color_objects.py", line 524, in __init__
self.rgb_r = float(rgb_r)
File "C:\Users\User\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\series.py", line 141, in wrapper
raise TypeError(f"cannot convert the series to {converter}")
TypeError: cannot convert the series to <class 'float'>
Есть ли у кого-нибудь идеи, как исправить эту проблему?
1 ответ
Решение
convert_color
ожидает числа с плавающей запятой, и вместо этого вы даете ему столбцы фрейма данных. Вам нужно применять преобразование по одной строке за раз, что можно сделать следующим образом:
xyz = df.apply(
lambda row: convert_color(
sRGBColor(row.R, row.G, row.B, is_upscaled=True), xyYColor
),
axis=1,
)