我试着用PIL加载一个16位颜色的RGBA图像。
我从以下链接下载了图像pnggrad16rgba.png:https://www.fnordware.com/superpng/samples.html

我检查过它的每个像素的颜色通道确实有16位:

但是,当我试图加载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位数据而不将其向下转换为uint8和PIL
如果没有,还有什么其他库能处理这个问题呢?
发布于 2020-01-21 08:27:05
PIL不支持多通道16位/通道映像-参见文档。我建议您将OpenCV与cv2.IMREAD_UNCHANGED标志一起使用,如下所示:
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)https://stackoverflow.com/questions/59836574
复制相似问题