【问题标题】:What is the right way to write an HDR image using OpenCV in Python?在 Python 中使用 OpenCV 编写 HDR 图像的正确方法是什么?
【发布时间】:2019-04-06 15:06:14
【问题描述】:

我想使用 OpenCV 对现有 HDR 图像执行算术运算,然后以 .hdr 格式编写 HDR 文件。算术运算对这个问题并不重要,所以假设我想读取一个 .hdr 文件,然后将其写入相同的格式。

我尝试按照通常的方式进行操作,首先将 hdr 文件读取为

img = cv2.imread('original.hdr', -1).astype(np.float32)

然后写成

cv2.imwrite('new_original.hdr', img)

我使用 Mac 的 Finder 和 OpenHDRViewer 来查看 HDR 图像。当我运行上述代码时,Mac finder 能够正确显示new_original.hdr 文件。但是当我尝试使用 OpenHDRViewer 查看相同的 hdr 图像时,它会给出一个错误提示 -

不支持此文件类型! 该站点目前尚不支持色调映射或 LDR 图像。稍后回来查看更新。

new_original.hdr 不是有效的 HDR 图像吗?

当我使用传统的cv2.imwrite() 写入 HDR 图像时,是否会丢失一些基于格式的信息。这样做的正确方法是什么?

【问题讨论】:

  • 请问您有合适的 HDR 文件的链接吗?您能否更具体地说明您指的是哪种实际 HDR 格式?
  • @MarkSetchell 您可以使用此处的任何示例文件-pfstools.sourceforge.net/hdr_gallery.html 我指的是 .hdr 格式,我认为这是辐射图/格式。

标签: python opencv hdr


【解决方案1】:

@MukulKhanna 我遇到了同样的问题。但是,通过在 imwrite() 中将扩展名从 .hdr 更改为 .exr 就可以了,我可以在 OpenHDRViewer 上查看图像。

【讨论】:

    【解决方案2】:

    好像是你写的

    img = cv2.imread('original.hdr', -1).astype(np.float32)

    这将产生一个float32数据类型的图像,范围为0~255。

    我猜float32 hdr图像的强度应该限制在0~1左右。 (无论如何,即使对于 hdr 图像,255x 动态范围也太高而无法显示)

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      相关资源
      最近更新 更多