首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JPEG压缩保存uint16 NumPy数组,并加载uint16 JPEG压缩数据?

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

Stack Overflow用户
提问于 2019-11-21 09:19:32
回答 1查看 1.3K关注 0票数 0

如果我有一个包含dtype=np.uint16的NumPy数组,如何将数据保存为uint16 JPEG压缩格式?

我怎样才能加载uint16的JPEG压缩数据?

它看起来不像枕头支持这一点,至少不支持将文件保存为jpg扩展名,请参阅Pillow image file formats

EN

回答 1

Stack Overflow用户

发布于 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位的灰度图像:

代码语言:javascript
复制
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图像:

代码语言:javascript
复制
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。

希望这能有所帮助!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58965843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档