如何正确读取.exr文件并将其保存为.flo?

问题描述 投票:0回答:0

首先,我想一步一步解释我正在尝试做什么:

  1. 我将游戏运动矢量存储在 .exr 文件中(没有关于像素格式的信息,可能是 float32),但是我提供了解码速度的功能。
  2. 我想保存为.flo格式,然后我用flowiz查看是否保存正确 当前结果可以在我提供的图像中看到。流程以图像的 1/4 保存并复制(我也确信此流程是正确的,但由于某种原因缩放和复制)。

这是我读取 .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")

写功能:

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()

我尝试了各种改变读取图像的方式,正如我所料这就是导致问题的原因。尝试使用 opencv 读取 .exr :

im2=cv2.imread(path,  cv2.IMREAD_ANYCOLOR | cv2.IMREAD_ANYDEPTH).transpose(2,0,1)
#also tried this:
im2=cv2.imread(path,-1)

但是他们都返回了一些损坏的数据,最终的流程是完全随机的。 另请阅读: 使用 python(字节数组和 numpy)读取 middlebury 'flow' 文件 这就是我想写的格式,但是我无法按照他们提供的方式阅读 exr,因为它没有以这种方式保存。

python tensor python-imageio
© www.soinside.com 2019 - 2024. All rights reserved.