如何获得帧中每个像素的Z距离(计算机视觉)?

时间:2020-05-28 22:42:09

标签: python 3d blender

我目前正在执行计算机视觉任务,并且遇到以下问题。我需要序列的地面真理值。我有一个很好的序列,其中相机移动通过我的场景并捕获RGB帧。现在,我需要为每个RGB帧都对应一个帧,但是应该存储距离而不是RGB值。我知道,您可以通过使用EXR文件格式将“渲染层”节点的“深度”输出连接到“合成”工作区中的文件输出节点来获得总深度(从相机到真实对象的欧式距离)。但是,我只需要到摄像机的距离的Z分量,并且我不想以后再使用摄像机参数对其进行转换(已经做到了,但是我需要一个更简洁的工作流程)。

我偶然发现了此功能:bpy_extras.view3d_utils.region_2d_to_location_3d,但是几乎找不到关于如何正确使用它的任何信息。我不知道该输入什么。 有谁有解决方案,或者也许已经使用过该功能,并且可以向我解释我如何在默认的Blender设置(仅多维数据集,相机和灯光)中使用它,以及它是否做了我期望的功能(给出x,y, z,然后我可以删除不必要的信息)? 我已经尝试使用world_to_camera_view函数,但这仅适用于像顶点这样的对象参数,不适用于整个表面来创建密集贴图的情况。 我也知道,您可以使用Cycles材质渲染场景以将x,y,z存储在RGB通道中,但是在那里您只能获得世界坐标,并且在渲染了真实序列后必须更改材质。 我真的只需要一个到相机的z距离的帧,对于该帧中的每个像素。

如果有人可以帮助我,我将非常感激,因为我已经尝试了好几天了。

0 个答案:

没有答案