这是我读取 .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,因为它没有以这种方式保存。