【问题标题】:How to use python-colormath's Delta E function with pandas Series如何将 python-colormath 的 Delta E 函数与 pandas 系列一起使用
【发布时间】:2017-03-10 09:23:02
【问题描述】:

我正在使用 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'>

有没有办法将熊猫系列转换为 LabColor 类对象?

【问题讨论】:

  • colormath 尝试将 LabColors 的输入强制转换为浮点数 (self.lab_l = float(lab_l))
  • 您要使用 Delta E 2000 还是 1976?您说的是 2000,但您的代码使用的是 1976。
  • 谢谢你的迈克尔,这对我帮助很大!我想实际使用两者,以便比较两个方程(1974 年和 2000 年)之间的差异。按照您使用颜色库的想法,我已经尝试过了,它有效! :)
  • 太棒了!乐意效劳。如果您发现其中一个答案有用,请不要忘记将其标记为已接受。

标签: python pandas colors


【解决方案1】:

似乎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)

【讨论】:

    【解决方案2】:

    似乎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]),
                                 )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 2020-04-18
      • 1970-01-01
      • 2016-05-21
      • 2018-11-22
      • 2018-03-30
      • 2014-12-01
      相关资源
      最近更新 更多