Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ImageIO和Python将EXR转换为JPEG_Python_Python Imageio - Fatal编程技术网

使用ImageIO和Python将EXR转换为JPEG

使用ImageIO和Python将EXR转换为JPEG,python,python-imageio,Python,Python Imageio,我只是试图转换和EXR到一个jpg图像,但我的结果是非常黑暗。有人知道我做错了什么吗?我正在标准化图像值,然后将它们放入0-255颜色空间。尽管如此,它似乎仍然不正确 测试exr图像的Dropbox链接: 样本图像是深度为16位的EXR图像(通道)。下面是一个python脚本,用于使用opencv将exr图像转换为png import numpy as np import cv2 im=cv2.imread("torus.exr",-1) im=im*65535 im[im>65535]

我只是试图转换和EXR到一个jpg图像,但我的结果是非常黑暗。有人知道我做错了什么吗?我正在标准化图像值,然后将它们放入0-255颜色空间。尽管如此,它似乎仍然不正确

测试exr图像的Dropbox链接:


样本图像是深度为16位的EXR图像(通道)。下面是一个python脚本,用于使用opencv将exr图像转换为png

import numpy as np
import cv2
im=cv2.imread("torus.exr",-1)
im=im*65535
im[im>65535]=65535
im=np.uint16(im)
cv2.imwrite("torus.png",im)

下面是使用imageio修改的代码,它将以jpeg格式保存图像

import sys, os
import imageio

def convert_exr_to_jpg(exr_file, jpg_file):
    if not os.path.isfile(exr_file):
        return False

    filename, extension = os.path.splitext(exr_file)
    if not extension.lower().endswith('.exr'):
        return False

    # imageio.plugins.freeimage.download() #DOWNLOAD IT
    image = imageio.imread(exr_file)
    print(image.dtype)

    # remove alpha channel for jpg conversion
    image = image[:,:,:3]


    data = 65535 * image
    data[data>65535]=65535
    rgb_image = data.astype('uint16')
    print(rgb_image.dtype)
    #rgb_image = imageio.core.image_as_uint(rgb_image, bitdepth=16)

    imageio.imwrite(jpg_file, rgb_image, format='jpeg')
    return True


if __name__ == '__main__':
    exr = "torus.exr"
    jpg = "torus3.jpeg"
    convert_exr_to_jpg(exr, jpg)


(使用python 3.5.2和Ubuntu 16.04进行测试)

我遇到了同样的问题,并在这里修复了它。由于ImageIO将所有内容都转换为numpy数组,因此您可以对值进行gamma校正(修复暗度问题),然后将其转换回PIL图像,以便轻松处理:

im = imageio.imread("image.exr")
im_gamma_correct = numpy.clip(numpy.power(im, 0.45), 0, 1)
im_fixed = Image.fromarray(numpy.uint8(im_gamma_correct*255))

我在你非常漂亮的圆环结上测试了这个,效果非常好。如果您需要更完整的代码片段,请告诉我,但我认为以上内容回答了您的实际问题。

我认为EXR允许范围非常广泛的值,因此将其扩展到最大值可能不是一个好主意。我想你可能还需要一些伽马校正。我想你应该分别对每个颜色通道进行规格化。任何关于如何做到这一点的帮助都会非常感激。hdr的顺便说一句。
im = imageio.imread("image.exr")
im_gamma_correct = numpy.clip(numpy.power(im, 0.45), 0, 1)
im_fixed = Image.fromarray(numpy.uint8(im_gamma_correct*255))