在我的圖像編輯應用程序中,我有一個將sRGB的32位浮點圖像轉換爲線性色彩空間的功能。其計算公式爲:在numpy中向量化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當它不工作功能
任何幫助表示讚賞。
'更好solution' - 如何更好?內存明智還是性能明智? – Divakar
更清潔的東西,因爲這在我看來有點像黑客。我非常想找到這樣做的標準方法。還沒有測試過速度(這是相當快),但我想這絕對是浪費內存?抱歉不清楚。 – tde