【发布时间】:2020-01-31 13:26:21
【问题描述】:
我需要用 Python 3.6 转换一个二维 24 位 rgb 矩阵
[[rr11gg11bb11, rr12gg12bb12,.. ..,rr1mgg1mbb1m],
.
.
[rri1gg11bb11, rr12ggi2bb12,.. ..,rr1mgg1mbb1m]
.
.
[rrn1ggn1bbn1, rrn2ggn2bbn2,.. ..,rrmnggmnbbmn]]
转换成 tif、png 和 jpg 格式的图片。
我还有一个文件形式的矩阵
image.bin.
从这个二进制文件中,我可以在 RAW Pixel Viewer 的帮助下查看图像:
http://rawpixels.net/
我找到了 PIL 库,但我没有找到任何方法可以根据这些数据构建图像对象。我怎样才能做到这一点?我使用 Python 3.6。
现在我尝试了以下方法:
im = Image.frombuffer('RGB', (self.width, self.height), self.matrix, 'raw',
'RGB', 0, 1)
logger.info("image object created.")
im.save('result.png')
logger.info("image saved as result.png")
但我得到了消息:
TypeError: a bytes-like object is required, not 'list'
现在我发现我必须将对象转换为字节数组:
npm = np.array(self.matrix)
arr = bytearray(npm)
print(arr)
im = Image.frombuffer('RGB', (self.width, self.height), arr, 'raw',
'RGB', 0, 1)
当我使用“L”或“RGBA”而不是“RGB”时,转换才有效。奇怪的是,在这种情况下它拒绝了一个 bytearray 对象。
【问题讨论】:
-
看这里...stackoverflow.com/a/58075903/2836621 你需要
'RGB'而不是'L'。 -
@MarkSetchell
ba似乎是我的矩阵。所以我做了以下事情: -
不要将代码放在 cmets 区域。如果它不起作用,请将其添加到您的问题中,或者如果它起作用,则将其添加为答案。然后接受它是正确的并抓住要点:-)
-
@MarkSetchell 好的,我已经这样做了。但它不会创建图像。我认为我不必进行您的链接中显示的第一步,因为我已经有了矩阵。
标签: python-3.x image matrix png data-conversion