我正在用Python做一些图像去卷积,并且去卷积的图像是在一个具有3个轴的numpy数组中生成的:x,y和RGB。因此,典型阵列的形状为3000x3000x3。
我希望将结果输出为某种图像文件。 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格式;使用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仍然有效。
希望有帮助!