我使用blender生成了一些深度图,并以OpenEXR格式保存了z缓冲区值(32位)。有没有办法使用OpenCV 2.4.13和python 2.7访问.exr文件中的值(逐个像素深度信息)?没有任何例子可以找到。我只能在文档中看到支持这种文件格式。但是尝试阅读这样的文件会导致错误。
new=cv2.imread("D:\\Test1\\0001.exr")
cv2.imshow('exr',new)
print new[0,0]
错误:
print new[0,0]
TypeError: 'NoneType' object has no attribute '__getitem__'
和
cv2.imshow('exr',new)
cv2.error: ..\..\..\..\opencv\modules\highgui\src\window.cpp:261: error: (-215) size.width>0 && size.height>0 in function cv::imshow
答案 0 :(得分:0)
我参加聚会可能有点晚了,但是; 是的,您绝对可以使用OpenCV。
cv2.imread(PATH_TO_EXR_FILE, cv2.IMREAD_ANYCOLOR | cv2.IMREAD_ANYDEPTH)
应该为您提供所需的东西
答案 1 :(得分:0)
您可以使用OpenEXR软件包
pip --no-cache-dir install OpenEXR
要读取exr文件
def read_depth_exr_file(filepath: Path):
exrfile = exr.InputFile(filepath.as_posix())
raw_bytes = exrfile.channel('B', Imath.PixelType(Imath.PixelType.FLOAT))
depth_vector = numpy.frombuffer(raw_bytes, dtype=numpy.float32)
height = exrfile.header()['displayWindow'].max.y + 1 - exrfile.header()['displayWindow'].min.y
width = exrfile.header()['displayWindow'].max.x + 1 - exrfile.header()['displayWindow'].min.x
depth_map = numpy.reshape(depth_vector, (height, width))
return depth_map