【问题标题】:Read, process and show the pixels in .EXR format images读取、处理和显示 .EXR 格式图像中的像素
【发布时间】:2019-08-28 14:10:21
【问题描述】:

我想读取 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')

【问题讨论】:

标签: python-2.7 opencv image-processing openexr hdrimages


【解决方案1】:

OpenEXR 似乎缺乏花哨的图像处理功能,例如显示图像或将图像保存为不同的格式。为此,我建议您使用充满图像处理功能的OpenCV

你可能需要做的是:

  • 仅使用OpenEXR 读取exr,然后提取通道并将它们转换为numpy 数组为rCh = np.asarray(rCh, dtype=np.uint8)
  • 从这些 numpy 数组创建一个 RGB 图像作为img_rgb = cv2.merge([b, g, r])
  • 为您列出的操作使用 OpenCV 函数:
    • 尺寸: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)

【讨论】:

  • 似乎是一个非常明智的方法。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2014-04-10
    • 1970-01-01
    • 2012-07-18
    • 2015-07-26
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    相关资源
    最近更新 更多