如何使用JPEG压缩保存uint16 NumPy数组,并加载uint16 JPEG压缩数据?

2024-04-19 18:25:16 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个带有dtype=np.uint16的NumPy数组,如何将数据保存为uint16JPEG压缩?你知道吗

然后如何加载uint16JPEG压缩数据?你知道吗

枕头似乎不支持这一点,至少不支持将文件保存为jpg扩展名,请参见Pillow image file formats。你知道吗


Tags: 文件数据imagenumpynp数组filejpg
1条回答
网友
1楼 · 发布于 2024-04-19 18:25:16

无法以(纯旧)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就会浮现在脑海中,它的^{}方法也支持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。你知道吗

希望有帮助!你知道吗

相关问题 更多 >