如果我有一个 NumPy 数组dtype=np.uint16
,如何将数据保存为uint16
JPEG 压缩文件?
然后如何加载uint16
JPEG 压缩数据?
枕头似乎不支持这一点,至少不通过将文件保存为jpg
扩展名,请参阅枕头图像文件格式。
如果我有一个 NumPy 数组dtype=np.uint16
,如何将数据保存为uint16
JPEG 压缩文件?
然后如何加载uint16
JPEG 压缩数据?
枕头似乎不支持这一点,至少不通过将文件保存为jpg
扩展名,请参阅枕头图像文件格式。
您不能以(普通旧)JPEG格式保存 16 位图像。只允许使用 8 位和 12 位(参见 ISO/IEC 10918-1)。您可能会查看JPEG 2000,它也支持 16 位。
Pillow 支持 JPEG 2000。不幸的是,我无法保存 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 数组,就会想到OpenCVcv2.imwrite
,它的方法也支持 JPEG 2000。使用 OpenCV,我还能够保存 16 位 RGB 图像:
import cv2
import numpy as np
image_array = np.uint16(np.random.rand(200, 200, 3) * 65535)
cv2.imwrite('image_cv.jp2', image_array)
并且,在 GIMP 中打开image_cv.jp2
会显示 16 位 RGB 图像。
默认情况下,OpenCV 禁用 JPEG 2000 支持。您必须显式设置环境变量OPENCV_IO_ENABLE_JASPER=1
。
或者,您可以选择(压缩)PNG。
希望有帮助!