我有一个3,076,568个二进制值(1s和0s)的NumPy数组。我想将其转换为矩阵,然后在Python中转换为灰度图像。
但是,当我尝试将数组重塑为1,538,284 x 1,538,284矩阵时,出现内存错误。
如何减小矩阵的大小,以便将其变成适合屏幕显示的图像而又不丢失唯一性/数据?
此外,如何将其转换为灰度图像?
任何帮助或建议,将不胜感激。谢谢你。
最佳答案
您的“二进制值”数组是字节数组吗?
如果是这样,您可以在调整大小后执行以下操作(使用Pillow):
from PIL import Image
im = Image.fromarray(arr)
然后
im.show()
看到它。如果您的数组只有0和1(1位深度或b/w),则可能需要将其乘以255
im = Image.fromarray(arr * 255)
这里是一个例子:
>>> arr = numpy.random.randint(0,256, 100*100) #example of a 1-D array
>>> arr.resize((100,100))
>>> im = Image.fromarray(arr)
>>> im.show()
编辑(2018):
这个问题写于2011年,自从要求在使用
mode='L'
加载时使用fromarray
参数以来,Pillow发生了变化。另外,在下面的评论中,据说也需要
arr.astype(np.uint8)
,但我尚未对其进行测试