我如何将numpy数组写为高动态范围图像?

问题描述 投票:0回答:1

我正在用Python做一些图像去卷积,并且去卷积的图像是在一个具有3个轴的numpy数组中生成的:x,y和RGB。因此,典型阵列的形状为3000x3000x3。

我希望将结果输出为某种图像文件。 PNG,TIFF,JPEG或任何其他广泛使用的格式都可以。

我的问题是,诸如imageio.imsave之类的功能都每个颜色平面仅以8位精度写入文件。我需要更多动态范围。 imageio.imsave有一个“实验”位参数,但对于RGB图像似乎无效。

是否有一种方法可以将numpy数组输出为每个色彩平面具有16或32位精度的RGB图像?

image numpy javax.imageio
1个回答
0
投票

您可以使用OpenCV,该图像已使用NumPy数组。为了保存,有imwrite功能:

通常,使用此功能只能保存8位单通道或3通道(具有'BGR'通道顺序)图像,但以下情况除外:

  • 在使用PNG,JPEG 2000和TIFF格式的情况下,可以保存16位无符号(CV_16U)图像
  • 32位浮点(CV_32F)图像可以保存为PFM,TIFF,OpenEXR和Radiance HDR格式;使用LogLuv高动态范围编码(每像素4个字节)将保存3通道(CV_32FC3)TIFF图像]

我做了以下小测试:

imwrite

我可以使用GIMP打开所有图像,并且位深度都已正确设置。我无法使用GIMP编写和打开32位浮点TIFF,也无法解释为什么会这样。有几个import cv2 import numpy as np image_8 = np.uint8(np.random.rand(300, 300, 3) * 256) image_16 = np.uint16(np.random.rand(300, 300, 3) * 65536) image_32 = np.float32(np.random.rand(300, 300, 3)) cv2.imwrite('image_8.png', image_8) cv2.imwrite('image_16.png', image_16) cv2.imwrite('image_32.exr', image_32) ,但似乎没有一个可以解决32位浮点型TIFF保存的问题。尽管如此,32位浮点EXR仍然有效。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.