如果我有一个带有dtype=np.uint16
的NumPy数组,如何将数据另存为uint16
JPEG压缩?
然后如何加载uint16
JPEG压缩数据?
[Pillow似乎不支持此功能,至少不是通过将文件另存为jpg
扩展名,请参阅Pillow image file formats。
您无法以(普通)JPEG格式保存16位图像。仅允许使用8位和12位(请参阅ISO / IEC 10918-1)。您可以查看JPEG 2000,它也支持16位。
Pillow has JPEG 2000 support。不幸的是,我无法保存16位RGB图像。我所能做的最好是一张16位灰度图像:
import numpy as np
from PIL import Image
image_array = np.uint16(np.random.rand(200, 200) * 65535)
image_pil = Image.fromarray(image_array, 'I;16')
image_pil.save('image_pil.jp2')
在GIMP中打开image_pil.jp2
确实显示了16位灰度图像。
由于您已经有了NumPy数组,因此想到OpenCV,其cv2.imwrite
方法也支持JPEG 2000。使用OpenCV,我还可以保存16位RGB图像:
cv2.imwrite
并且,在GIMP中打开import cv2
import numpy as np
image_array = np.uint16(np.random.rand(200, 200, 3) * 65535)
cv2.imwrite('image_cv.jp2', image_array)
将显示16位RGB图像。
默认情况下,OpenCV禁用JPEG 2000支持。您必须显式设置环境变量image_cv.jp2
。
或者,您可以使用(压缩的)PNG。
希望有帮助!