在我的图像编辑应用程序中,我具有将 32 位浮点图像从 sRGB 转换为线性色彩空间的功能。公式为:
if value <= 0.04045: (value / 12.92)
if value > 0.04045: ((value + 0.055) / 1.055)^2.4)
我的图像是一个名为img32的三维numpy.ndarray。
到目前为止我的实现:
boolarray = img32 <= 0.04045
lower = (img32 / 12.92) * boolarray.astype(np.int)
upper = np.power(((img32 + 0.055) / 1.055), 2.4) * np.invert(boolarray).astype(np.int)
img32 = lower + upper
所以,我正在创建一个新的数组boolarray,其真值为 <= 0.04045 并乘以它。
什么是更好的解决方案?
我试过类似的东西:
img32[img32 < 0.04045] = img32 / 12.92
这在第一步有效,但在第二步失败:
img32[img32 >= 0.04045] = np.power(((img32 + 0.055) / 1.055), 2.4)
可能是因为它在包裹在np.power函数中时不起作用
任何帮助表示赞赏。