使用颜色数学将 RGB 转换为 xyY

Conversion RGB to xyY with colormath

我使用颜色数学将 RGB 值转换为 xyY 值。它适用于 1 个 RGB 值,但我找不到正确的代码来对从 Excel 导入的多个 RGB 值进行转换。我使用以下代码:

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'>

有人知道如何解决这个问题吗?

convert_color 期望浮点数,而您却给它数据框列。您需要一次应用一行转换,可以按如下方式完成:

xyz = df.apply(
    lambda row: convert_color(
        sRGBColor(row.R, row.G, row.B, is_upscaled=True), xyYColor
    ),
    axis=1,
)