如何使用PIL加载16位/通道RGB(a)图像?

2024-03-29 05:36:45 发布

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

我正在尝试用PIL加载一个16位颜色的RGBA图像

我从以下链接下载了图像pnggrad16rgba.png: https://www.fnordware.com/superpng/samples.htmlenter image description here 我检查过它的颜色通道确实是每像素16位:

screenshot of file properties in Windows Explorer

但是当我尝试在PIL中加载数据时,我得到了uint8数据:

>>> from PIL import Image
>>> import numpy
>>> im = Image.open("D:/pnggrad16rgba.png")
>>> arr = numpy.array(im)
>>> arr.dtype
dtype('uint8')
>>> arr[0, 0]
array([  0,   0, 255, 255], dtype=uint8)

有没有一种方法可以访问16位数据,而不必使用PIL将其向下转换到uint8

如果没有,还有哪个图书馆可以处理这个问题


Tags: 数据图像imageimportnumpypilpng颜色
1条回答
网友
1楼 · 发布于 2024-03-29 05:36:45

PIL不支持多通道16位/通道图像-请参阅documentation。我建议您使用带有cv2.IMREAD_UNCHANGED标志的OpenCV,如下所示:

import cv2                                                                                               

# Load image as 16-bits per channel, 4 channels
BGRA = cv2.imread('pnggrad16rgba.png', cv2.IMREAD_UNCHANGED) 

# Check channels and depth
print(BGRA.dtype, BGRA.shape)                                                                                                
dtype('uint16')
(600, 600, 4)

请注意,您的图像将按BGRA顺序排列,而不是RGBA,因为OpenCV是。。。嗯,OpenCV

如果需要,您可以使用

RGBA = cv2.cvtColor(BGRA, cv2.COLOR_BGRA2RGBA)

相关问题 更多 >