我想读取exr文件格式的图像,并查看相应位置的像素强度。并且还希望将它们堆叠在一起,以将它们集成到神经网络中。如何在这种格式上进行常规图像处理?请帮助我做到这一点!
我已经使用OpenEXR文件尝试了此代码,但无法继续进行操作。
import OpenEXR
file = OpenEXR.InputFile('file_name.exr')
我应该会看到普通的图像处理工具,例如
file.size()
file.show()
file.write('another format')
file.min()
file.extract_channels()
file.append('another exr file')
答案 0 :(得分:1)
OpenEXR似乎缺少精美的图像处理功能,例如显示图像或将图像保存为其他格式。为此,我建议您使用OpenCV
,它具有完整的图像处理功能。
您可能需要做的是:
exr
读取OpenEXR
,然后提取通道并将其转换为rCh = np.asarray(rCh, dtype=np.uint8)
的numpy数组img_rgb = cv2.merge([b, g, r])
创建RGB图像。img_rgb.shape
cv2.imshow(img_rgb)
cv2.imwrite("path/to/file.jpg", img_rgb)
np.min(b)
,np.min(g)
,np.min(r)
b, g, r = cv2.split(img_rgb)
答案 1 :(得分:0)
OpenEXR 网页上有一个 example:
import sys
import array
import OpenEXR
import Imath
if len(sys.argv) != 3:
print "usage: exrnormalize.py exr-input-file exr-output-file"
sys.exit(1)
# Open the input file
file = OpenEXR.InputFile(sys.argv[1])
# Compute the size
dw = file.header()['dataWindow']
sz = (dw.max.x - dw.min.x + 1, dw.max.y - dw.min.y + 1)
# Read the three color channels as 32-bit floats
FLOAT = Imath.PixelType(Imath.PixelType.FLOAT)
(R,G,B) = [array.array('f', file.channel(Chan, FLOAT)).tolist() for Chan in ("R", "G", "B") ]
在此之后,您应该拥有三个浮点数据数组,每个通道一个。您可以轻松地将这些转换为 numpy
数组,然后按照用户 @ZdaR 的建议继续使用 opencv
。