You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确读取.exr文件并保存为.flo格式?问题排查求助

问题:EXR运动向量转FLO格式时出现缩放重复问题

输入图片描述

需求说明

  • 我有存储在.exr文件中的游戏运动向量(未知像素格式,大概率为float32),已有用于解码速度的函数。
  • 需要将其保存为.flo格式,再用flowiz验证保存是否正确。当前结果如附图所示:flow被压缩到图片1/4区域并重复(已确认flow本身正确,问题出在格式转换环节的缩放和重复)。

现有代码

EXR读取代码(基于iio - imageiov3)

def read_exr_np(path):
    return np.array(iio.imread(str(path),index=0)[..., :3]).transpose((2,0,1)) 

转换函数代码

def generate_flow_from_exr(exr_path):
    flow_exr=read_exr_np(exr_path)
    flow  = decode_velocity(flow_exr,[1440,2560])
    write_flow(flow,2560,1440,save_path+str(i-1)+".flo")
    os.system("python -m flowiz "+save_path+str(i-1)+".flo")

FLO写入函数代码

def write_flow(tensor, width, height, filename):
    f = open(filename, 'wb')
    magic = np.array([202021.25], dtype=np.float32)
    w = np.array([width], dtype=np.int32)
    h = np.array([height], dtype=np.int32)
    magic.tofile(f)
    w.tofile(f)
    h.tofile(f)
    flow = np.asarray(tensor).astype('float32')
    flow.tofile(f)
    f.close()

尝试过的解决方法

我推测问题出在EXR读取环节,尝试用OpenCV读取.exr文件:

im2=cv2.imread(path,  cv2.IMREAD_ANYCOLOR | cv2.IMREAD_ANYDEPTH).transpose(2,0,1)
#也尝试过:
im2=cv2.imread(path,-1)

但两种方式都返回损坏数据,最终生成的flow完全随机。已确认目标.flo格式符合Middlebury规范,但无法用对应方法读取.exr文件。

补充:有示例.exr文件可供测试。

内容的提问来源于stack exchange,提问作者szefitoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:05:22