Преобразование 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,
)
Другие вопросы по тегам