我正在Python中进行一些图像去卷积,去卷积后的图像在一个有3个轴的numpy数组中生成:x
、y
和RGB。因此,一个典型的阵列具有3000 x 3000 x 3
的形状。
我希望将结果输出为某种图像文件。PNG、TIFF、JPEG或任何其他广泛使用的格式都可以。
我的问题是,像imageio.imsave
这样的函数都以每个颜色平面只有8位精度的方式写入文件。我需要更多的动态范围。imageio.imsave
有一个"实验性"比特参数,但它似乎对RGB图像没有影响。
有没有办法将numpy数组输出为每个色平面精度为16或32位的RGB图像
您可以使用OpenCV,它已经为图像使用NumPy数组。为了保存,有imwrite
功能:
通常,使用此功能只能保存8位单通道或3通道(具有"BGR"通道顺序(图像,但以下情况除外:
- 在PNG、JPEG 2000和TIFF格式的情况下,可以保存16位无符号(CV_16U(图像
- 32位浮点(CV_32F(图像可以保存为PFM、TIFF、OpenEXR和Radiance HDR格式;3通道(CV_32FC3(TIFF图像将使用LogLuv高动态范围编码保存(每个像素4字节(
我做了以下小测试:
import cv2
import numpy as np
image_8 = np.uint8(np.random.rand(300, 300, 3) * 255)
image_16 = np.uint16(np.random.rand(300, 300, 3) * 65535)
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)
我可以使用GIMP打开所有图像,并且比特深度都设置正确。我无法编写和打开(使用GIMP(32位浮点TIFF,我无法解释为什么会这样。有几个ImwriteFlags
,但似乎没有一个能解决使用32位浮点保存TIFF的问题。尽管如此,32位浮点EXR仍然有效。
希望能有所帮助!