在Python中将黑白数组转换为图像?

7

我有一个50x50元素的数组,每个元素都是True或False - 这代表了一个50x50的黑白图像。

我无法将其转换为图像?我尝试了无数不同的函数,但它们都不起作用。

import numpy as np
from PIL import Image

my_array = np.array([[True,False,False,False THE DATA IS IN THIS ARRAY OF 2500 elements]])

im = Image.fromarray(my_array)

im.save("results.jpg")

^ 这个错误提示是“无法处理此数据类型”。

我发现PIL有一些函数,但它们只能将RGB像素列表转换为图像,而我只有一个简单的黑白数组,没有其他通道。


1
澄清一下:如果你有一个数组[True, False],那么你想要它代表两个像素,一个是黑色的,另一个是白色的? - Mdev
如果值为True - 表示白色像素,如果为False,则为黑色像素。因此,每个元素仅对应一个像素。这就是为什么每个50x50图像只有2500个元素的原因。 - user3010273
1
你只有一个长度为2500的numpy数组吗?换句话说,它是一个2500x1的数组而不是一个50x50的数组? - Mdev
我有一个50x50的数组。50个元素,每个元素包含50个像素 - 其中一个元素是一行。我似乎无法将其转换为简单的50x50图像。 - user3010273
1个回答

14

首先,你应该将你的数组变成50x50的二维数组,而不是一维数组:

my_array = my_array.reshape((50, 50))

那么,要获取标准的8位图像,你应该使用无符号的8位整数dtype:

my_array = my_array.reshape((50, 50)).astype('uint8')

但是你不希望 True 变为 1,而是想要它们变成 255

my_array = my_array.reshape((50, 50)).astype('uint8')*255

最后,您可以转换为PIL图像:

im = Image.fromarray(my_array)

我会像这样一次性完成所有操作:

im = Image.fromarray(my_array.reshape((50,50)).astype('uint8')*255)

2
假设您的数组有50 * 50 = 2500个元素。那么my_array.shape是什么? - askewchan
1
哦,我明白了,你的数组不是一个统一的数组,而是像一个数组的数组。你是如何创建这个数组的?my_array[0].dtype是什么? - askewchan
1
现在 my_array.dtypebool 吗? - askewchan
1
哦,它们是0和1,而jpeg的范围是0到255。尝试将数组乘以255 :P - askewchan
1
哇,太酷了,谢谢分享图片!它看起来既不像杯子也不像甜甜圈。 - askewchan
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接