在我的图像编辑应用程序中,我有一个将32位浮点图像从sRGB转换为线性颜色空间的功能。公式如下:
if value <= 0.04045: (value / 12.92)
if value > 0.04045: ((value + 0.055) / 1.055)^2.4)
我的图像是一个三维的numpy.ndarray,名字叫做img32。
目前为止,我的实现如下:
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 函数中使用时无法工作。
感谢任何帮助。