Python 如何使用PIL加载16位/通道RGB(a)图像?
我正在尝试用PIL加载一个16位颜色的RGBA图像 我从以下链接下载了图像pnggrad16rgba.png: 我检查过它的颜色通道确实是每像素16位: 但是当我尝试在PIL中加载数据时,我得到了Python 如何使用PIL加载16位/通道RGB(a)图像?,python,numpy,python-imaging-library,Python,Numpy,Python Imaging Library,我正在尝试用PIL加载一个16位颜色的RGBA图像 我从以下链接下载了图像pnggrad16rgba.png: 我检查过它的颜色通道确实是每像素16位: 但是当我尝试在PIL中加载数据时,我得到了uint8数据: >>> from PIL import Image >>> import numpy >>> im = Image.open("D:/pnggrad16rgba.png") >>> arr = numpy.arr
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
如果没有,还有什么库可以处理此问题?PIL不支持多通道16位/通道图像-请参阅。我建议您使用带有
cv2.IMREAD\u未更改标志的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)
我可以想象,Pil将在本地支持各种比特,参见文档。但是,同时,您是否尝试过在数组创建期间设置数据类型,例如arr=numpy.array(im,dtype=np.uint16)?