当前位置: 首页 > 知识库问答 >
问题:

如何在Python中以RGBE格式快速读取hdr图像?

万俟高峻
2023-03-14

我想知道如何通过在Python中快速高效地获取RGBE格式的像素值来读取HDR图像(.HDR)。

以下是我尝试过的一些事情:

    import imageio
    img = imageio.imread(hdr_path, format="HDR-FI")

或者:

    import cv2
    img = cv2.imread(hdr_path, flags=cv2.IMREAD_ANYDEPTH)

这会读取图像,但会以RGB格式给出值。

如何在不改变RGB值的情况下获得第4rth通道,即每个像素的“E”通道?我更喜欢只涉及imageio的解决方案,因为我仅限于使用该模块。

共有1个答案

楚硕
2023-03-14

如果您更喜欢RGBE表示而不是浮点表示,您可以在两者之间进行转换

def float_to_rgbe(image, *, channel_axis=-1):

    # ensure channel-last
    image = np.moveaxis(image, channel_axis, -1)

    max_float = np.max(image, axis=-1)
    
    scale, exponent = np.frexp(max_float)
    scale *= 256.0/max_float

    image_rgbe = np.empty((*image.shape[:-1], 4)
    image_rgbe[..., :3] = image * scale
    image_rgbe[..., -1] = exponent + 128

    image_rgbe[scale < 1e-32, :] = 0
    
    # restore original axis order
    image_rgbe = np.moveaxis(image_rgbe, -1, channel_axis)

    return image_rgbe

(注意:这基于RGBE参考实现(见此处),如果它实际上是瓶颈,则可以进一步优化。)

在您的评论中,您提到“如果我手动解析numpy数组并将通道拆分为一个E通道,这会花费太多时间…”,但如果没有看到代码,很难说出为什么会这样。以上是O(高度×宽度),这对于像素级图像处理方法似乎是合理的。

 类似资料:
  • 本文向大家介绍Python如何读取文件中图片格式,包括了Python如何读取文件中图片格式的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Python如何读取文件中图片格式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 正常情况下,图片命名的后缀和图片的格式一致,但可能某些情况下,图片的原格式和命名的后缀不一样,查看图片的实际格式 以

  • 问题内容: 我有很多.ico格式的图片,我想在我的Java SE项目中使用它们,但是它不知道格式。我该如何解决? 问题答案: 试用image4j-Java图像库 image4j库允许您以100%纯Java读取和写入某些图像格式。 当前支持以下格式: BMP(Microsoft位图格式-未压缩; 1、4、8、24和32位) ICO(Microsoft图标格式-1、4、8、24和32位[XP未压缩,V

  • 本文向大家介绍python 读取.nii格式图像实例,包括了python 读取.nii格式图像实例的使用技巧和注意事项,需要的朋友参考一下 我就废话不多说了,大家还是直接看代码吧~ 3D显示结果: ADNI数据维度(256,256,170)分段显示: 补充知识:python nii图像扩充 我就废话不多说了,大家还是直接看代码吧~ 以上这篇python 读取.nii格式图像实例就是小编分享给大家的

  • 我收到的csv文件格式不正确(无法控制生成此csv的应用程序) CSV的标题和第一行如下所示: 这是我用来读取csv的代码: 这是我收到的输出: 第一个问题是奇怪的字符(可能缺少编码选项?)另外,标题是错误的,不能在该格式上使用DictReader,这对于编辑CSV非常有用。 我可以重写一个新的CSV与标题正确格式化,这不是一个问题,但我不知道如何跳过CSV的前3行!?或者我可以用CSV即将到来的

  • 问题内容: 我正在实现一个简单的眼动仪,它需要对屏幕上正在发生的事情进行快速屏幕截图,并同时从网络摄像头捕获视频。 顺便说一句,从网络摄像头检索视频的速度更快,并且返回字节数组,该字节数组的处理速度非常快。 有人知道更快的解决方案吗?可以链接到Java的C ++库也可能会有所帮助。 谢谢! 更新:决定切换到OpenCV,现在正在寻找使用它制作屏幕截图的方法:) 问题答案: 你绝对应该对OpenCV

  • 问题内容: 如何将当前时间显示为: 在Python中。谢谢。 问题答案: 首先是快速而肮脏的方法,其次是精确的方法(识别日光的节省与否)。