|
import numpy |
|
import OpenEXR |
|
import Imath |
|
import imageio |
|
import glob |
|
import os |
|
|
|
def exr2hdr(exrpath): |
|
File = OpenEXR.InputFile(exrpath) |
|
PixType = Imath.PixelType(Imath.PixelType.FLOAT) |
|
DW = File.header()['dataWindow'] |
|
CNum = len(File.header()['channels'].keys()) |
|
if (CNum > 1): |
|
Channels = ['R', 'G', 'B'] |
|
CNum = 3 |
|
else: |
|
Channels = ['G'] |
|
Size = (DW.max.x - DW.min.x + 1, DW.max.y - DW.min.y + 1) |
|
Pixels = [numpy.fromstring(File.channel(c, PixType), dtype=numpy.float32) for c in Channels] |
|
hdr = numpy.zeros((Size[1],Size[0],CNum),dtype=numpy.float32) |
|
if (CNum == 1): |
|
hdr[:,:,0] = numpy.reshape(Pixels[0],(Size[1],Size[0])) |
|
else: |
|
hdr[:,:,0] = numpy.reshape(Pixels[0],(Size[1],Size[0])) |
|
hdr[:,:,1] = numpy.reshape(Pixels[1],(Size[1],Size[0])) |
|
hdr[:,:,2] = numpy.reshape(Pixels[2],(Size[1],Size[0])) |
|
return hdr |
|
|
|
def writehdr(hdrpath,hdr): |
|
h, w, c = hdr.shape |
|
if c == 1: |
|
hdr = numpy.pad(hdr, ((0, 0), (0, 0), (0, 2)), 'constant') |
|
hdr[:,:,1] = hdr[:,:,0] |
|
hdr[:,:,2] = hdr[:,:,0] |
|
imageio.imwrite(hdrpath,hdr,format='hdr') |
|
|
|
def load_exr(filename): |
|
hdr = exr2hdr(filename) |
|
h, w, c = hdr.shape |
|
if c == 1: |
|
hdr = numpy.squeeze(hdr) |
|
return hdr |
|
|
|
|
|
def test_exr(): |
|
files = glob.glob('D:/MLProjects/data/home/*.exr') |
|
savepath = 'D:/MLProjects/data/home' |
|
total = len(files) |
|
count = 0 |
|
print ('Files Num:', total) |
|
for file in files: |
|
hdr = exr2hdr(file) |
|
filename,file_ext = os.path.splitext(file) |
|
filename = os.path.basename(filename) |
|
filename = filename + '.hdr' |
|
curpath = os.path.join(savepath,filename) |
|
writehdr(curpath,hdr) |
|
count = count + 1 |
|
print ('process:', count, '/', total) |
|
|
|
if __name__ == '__main__': |
|
test_exr() |