如何用numpy数组保存HDR文件并保证像素值准确?
问题描述
我尝试用numpy数组保存HDR文件,原numpy数组信息如下(数据类型:np.float32):
# hdr_file_data [[[0.32543945, 0.38671875, 0.44213867], [0.30029297, 0.34204102, 0.3737793 ], [0.2697754, 0.28515625, 0.28295898], [0.2388916, 0.23449707, 0.20837402]], [[0.35668945, 0.4309082, 0.49853516], [0.32495117, 0.37939453, 0.4230957 ], [0.2836914, 0.3059082, 0.3088379 ], [0.2454834, 0.24353027, 0.21777344]], [[0.46069336, 0.54248047, 0.6040039 ], [0.4128418, 0.47705078, 0.51708984], [0.33666992, 0.3684082, 0.3713379 ], [0.28027344, 0.2854004, 0.26000977]], [[0.64697266, 0.7270508, 0.7607422 ], [0.60302734, 0.6665039, 0.67871094], [0.49047852, 0.52783203, 0.515625 ], [0.38598633, 0.40063477, 0.37036133]]]
使用imageio库保存的代码:
imageio.imwrite(filenameA, hdr_data, format='HDR-FI')
读取验证的代码:
imageio.imread(filenameA, format='HDR-FI')
但读取后的像素值与原数组存在差异,读取结果如下:
[[[0.32421875, 0.38671875, 0.44140625], [0.29882812, 0.34179688, 0.37304688], [0.26953125, 0.28515625, 0.28125 ], [0.23828125, 0.234375, 0.20800781]], [[0.35546875, 0.4296875, 0.49804688], [0.32421875, 0.37890625, 0.421875 ], [0.28320312, 0.3046875, 0.30859375], [0.24511719, 0.24316406, 0.21777344]], [[0.45703125, 0.5390625, 0.6015625 ], [0.41015625, 0.4765625, 0.515625 ], [0.3359375, 0.3671875, 0.37109375], [0.27929688, 0.28515625, 0.25976562]], [[0.64453125, 0.7265625, 0.7578125 ], [0.6015625, 0.6640625, 0.67578125], [0.48828125, 0.52734375, 0.515625 ], [0.38476562, 0.40039062, 0.36914062]]]
请问如何确保保存和读取HDR文件时像素值准确?
解决方案
- 差异原因:默认的HDR-FI(Radiance RGBE)格式采用8位通道编码,属于有损压缩,无法精确存储32位浮点原始数据,这是你看到数值偏差的核心原因。
- 方案1:使用无损浮点HDR格式
改用EXR格式保存,它原生支持无损存储32位浮点数据,修改代码如下:
这种方式读取后的数值会和原数组完全一致。# 保存 imageio.imwrite(filenameA, hdr_data, format='EXR') # 读取 saved_data = imageio.imread(filenameA, format='EXR') - 方案2:强制Radiance格式使用32位浮点编码(兼容性有限)
如果必须使用HDR-FI格式,可以指定保存时用32位浮点编码,但注意部分不支持该扩展的软件可能无法读取文件:imageio.imwrite(filenameA, hdr_data, format='HDR-FI', flags='32-bit') - 验证方法
保存后用numpy的allclose函数验证数值一致性(EXR格式应返回True):import numpy as np print(np.allclose(hdr_data, saved_data))
内容的提问来源于stack exchange,提问作者陆一凡
相关产品推荐
相关产品推荐

