在 Python 中使用 OpenEXR 将 PIL 图像写入 EXR
Write PIL image to EXR using OpenEXR in Python
我正在尝试使用 OpenEXR 将浮点 PIL 图像对象写入 EXR 文件中的通道。
我可以很好地将 EXR 数据读入 PIL 图像:
import OpenEXR
import Imath
from PIL import Image
import numpy as np
exrPath = "path/to/image.exr"
exrFile = OpenEXR.InputFile(exrPath)
pt = Imath.PixelType(Imath.PixelType.FLOAT)
dw = curFile.header()['dataWindow']
size = (dw.max.x - dw.min.x + 1, dw.max.y - dw.min.y + 1)
rgbf = [Image.frombytes("F", size, exrFile.channel(c, pt)) for c in ("R", "G", "B")]
然后我 运行 对 PIL 图像数据进行了一些操作,并希望将单个通道保存为新的 EXR。这是我目前所拥有的:
exrHeader = OpenEXR.Header(pilImage.size[0],pilImage.size[1])
exrHeader["channels"] = {"GRAY":Imath.Channel(Imath.PixelType(Imath.PixelType.FLOAT), 1, 1)}
exrOut = OpenEXR.OutputFile("path/to/new.exr", exrHeader)
exrOut.writePixels({"GRAY": np.array(pilImage).astype(np.float32).tostring()})
但是我得到这个错误:
TypeError: Data for channel 'GRAY' should have size 67108864 but got 16777216
如何将浮点 PIL 图像转换为正确的格式以写入浮点 EXR 通道?
我可以使用它,但还没有完全理解它。
npImage = np.squeeze(pilImage)
size = img.shape
exrHeader = OpenEXR.Header(size[1], size[0])
exrHeader['channels'] = {"GRAY":Imath.Channel(Imath.PixelType(Imath.PixelType.FLOAT), 1, 1)}
exrOut = OpenEXR.OutputFile("path/to/new.exr", exrHeader)
GRAY = (npImage[:,:]).astype(np.float32).tobytes()
exrOut.writePixels({'GRAY' : R})
exrOut.close()
我正在尝试使用 OpenEXR 将浮点 PIL 图像对象写入 EXR 文件中的通道。
我可以很好地将 EXR 数据读入 PIL 图像:
import OpenEXR
import Imath
from PIL import Image
import numpy as np
exrPath = "path/to/image.exr"
exrFile = OpenEXR.InputFile(exrPath)
pt = Imath.PixelType(Imath.PixelType.FLOAT)
dw = curFile.header()['dataWindow']
size = (dw.max.x - dw.min.x + 1, dw.max.y - dw.min.y + 1)
rgbf = [Image.frombytes("F", size, exrFile.channel(c, pt)) for c in ("R", "G", "B")]
然后我 运行 对 PIL 图像数据进行了一些操作,并希望将单个通道保存为新的 EXR。这是我目前所拥有的:
exrHeader = OpenEXR.Header(pilImage.size[0],pilImage.size[1])
exrHeader["channels"] = {"GRAY":Imath.Channel(Imath.PixelType(Imath.PixelType.FLOAT), 1, 1)}
exrOut = OpenEXR.OutputFile("path/to/new.exr", exrHeader)
exrOut.writePixels({"GRAY": np.array(pilImage).astype(np.float32).tostring()})
但是我得到这个错误:
TypeError: Data for channel 'GRAY' should have size 67108864 but got 16777216
如何将浮点 PIL 图像转换为正确的格式以写入浮点 EXR 通道?
我可以使用它,但还没有完全理解它。
npImage = np.squeeze(pilImage)
size = img.shape
exrHeader = OpenEXR.Header(size[1], size[0])
exrHeader['channels'] = {"GRAY":Imath.Channel(Imath.PixelType(Imath.PixelType.FLOAT), 1, 1)}
exrOut = OpenEXR.OutputFile("path/to/new.exr", exrHeader)
GRAY = (npImage[:,:]).astype(np.float32).tobytes()
exrOut.writePixels({'GRAY' : R})
exrOut.close()