Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用PIL加载16位/通道RGB(a)图像?_Python_Numpy_Python Imaging Library - Fatal编程技术网

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

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

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

我从以下链接下载了图像pnggrad16rgba.png: 我检查过它的颜色通道确实是每像素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位数据,而不必使用
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)?