如果我有一个包含dtype=np.uint16的NumPy数组,如何将数据保存为uint16 JPEG压缩格式?
我怎样才能加载uint16的JPEG压缩数据?
它看起来不像枕头支持这一点,至少不支持将文件保存为jpg扩展名,请参阅Pillow image file formats。
发布于 2019-11-21 14:26:05
您不能将16位图像保存为(普通) JPEG格式。只允许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方法也支持JPEG2000。使用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禁用JPEG2000支持。您必须显式设置环境变量OPENCV_IO_ENABLE_JASPER=1。
或者,您可以选择(压缩) PNG。
希望这能有所帮助!
https://stackoverflow.com/questions/58965843
复制相似问题