微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 colormath 将 RGB 转换为 xyY

如何解决使用 colormath 将 RGB 转换为 xyY

使用 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['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'>

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

Excel dataframe

解决方法

convert_color 期待浮点数,而您却给它数据框列。您需要一次应用转换一行,具体操作如下:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。