首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用PIL加载16位/通道RGB(A)图像?

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

Stack Overflow用户
提问于 2020-01-21 08:06:02
回答 1查看 1.7K关注 0票数 2

我试着用PIL加载一个16位颜色的RGBA图像。

我从以下链接下载了图像pnggrad16rgba.png:https://www.fnordware.com/superpng/samples.html

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

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

代码语言:javascript
复制
>>> 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位数据而不将其向下转换为uint8PIL

如果没有,还有什么其他库能处理这个问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-21 08:27:05

PIL不支持多通道16位/通道映像-参见文档。我建议您将OpenCVcv2.IMREAD_UNCHANGED标志一起使用,如下所示:

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

如果需要,可以使用

代码语言:javascript
复制
RGBA = cv2.cvtColor(BGRA, cv2.COLOR_BGRA2RGBA)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59836574

复制
相关文章

相似问题

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