我正在使用python-colormath来计算Lab颜色列表之间的色差delta E 2000。
我有两个pandas数据帧(df1和df2),在每个数据帧中我记录了Lab值。
这是我的代码:
L1 = df1.L
a1 = df1.a
b1 = df1.b
L2 = df2.L
a2 = df2.a
b2 = df2.b
colors1 = LabColor(lab_l= L1, lab_a = a1, lab_b = b1)
colors2 = LabColor(lab_l= L2, lab_a = a2, lab_b = b2)
delta_e_76 = delta_e_cie1976(colors1, colors2)
>> TypeError: cannot convert the series to <class 'float'>
有没有办法将pandas系列转换为LabColor类对象?
答案 0 :(得分:0)
似乎python-colormath
不支持使用无法转换为float
的任何内容作为其LabColor
对象的输入。
如果你想继续使用python-colormath
,你可以遍历系列对象而不是直接使用它。
delta_e_76 = []
for L1, a1, b1, L2, a2, b2 in zip(df1.L, df1.a, df1.b, df2.L, df2.a, df2.b):
colors1 = LabColor(lab_l= L1, lab_a = a1, lab_b = b1)
colors2 = LabColor(lab_l= L2, lab_a = a2, lab_b = b2)
delta_e_76.append(delta_e_cie1976(colors1, colors2))
或者,您可以尝试打包设置并调用delta_e_cie1976
并使用numpy的vectorize
函数进行包装。
@np.vectorize
def delta_e_vectorized(L1, a1, b1, L2, a2, b2):
colors1 = LabColor(lab_l=L1, lab_a=a1, lab_b=b1)
colors2 = LabColor(lab_l=L2, lab_a=a2, lab_b=b2)
return delta_e_cie1976(colors1, colors2)
delta_e_76 = delta_e_vectorized(df1.L, df1.a, df1.b, df2.L, df2.a, df2.b)
答案 1 :(得分:0)
似乎python-colormath
不支持使用无法转换为float
的任何内容作为其LabColor
对象的输入。
为了保持矢量化计算的优势,您可能希望使用支持此类操作的其他库来查看,例如Colour。
(免责声明,我参与了这个项目)
使用colour
可以执行此操作来计算颜色差异:
from colour import delta_E_CIE1976, tstack
delta_e_76 = delta_E_CIE1976(tstack([df1.L, df1.a, df1.b]),
tstack([df2.L, df2.a, df2.b]),
)