【发布时间】:2018-06-10 12:01:15
【问题描述】:
使用 ImageMagick,我可以将任何图像转换为具有每个 (RGB) 像素的像素/值表示的文本文件。这是通过“convert spektrum.png spektrum.txt”获得的 16 位整数 png 文件的示例输出
# ImageMagick pixel enumeration: 1553,24,65535,srgba
0,0: (16192,7721,24114,65535) #3F401E295E32FFFF srgba(25%,12%,37%,1)
这表示图像中的第一个左上角像素 (0,0) 及其 rgb(a) 值。
问题: 如何使用 Python(3) 将相同的图像读取到具有 16 位值的列表/数组中?如果我用枕头来阅读这个 PNG 文件
from PIL import Image
im = Image.open("spektrum.png")
pix = im.load()
print(pix[2,5])
(67, 35, 99, 255)
我只能从中得到 0-255 个 RGBA 值。
【问题讨论】:
-
可能有更简单的方法,但试试这个
convert spektrum.png -compress none pnm:- -
@MarkSetchell 好主意,但是以我不理解的模式吐出 rgb 值,我看不到解析该输出的方法。它应该是“Plain PPM(PNM)”,如此处所述:netpbm.sourceforge.net/doc/ppm.html 但输出不跟随它。看起来输出只是一个像素一个像素的 R-G-B 值,但在某处是我不理解的换行符。
-
Pillow 好像不支持 16 位。“抱歉,这是 Pillow 的限制。我们无法读取每个通道超过 8 位的多通道图像。” github.com/python-pillow/Pillow/issues/…
-
我发现python/opencv可以读取16bit,我试试看