10 python image matrix grayscale
我有一个3,076,568二进制值(1和0)的NumPy数组.我想将其转换为矩阵,然后转换为Python中的灰度图像.
但是,当我尝试将数组重新整形为1,538,284 x 1,538,284矩阵时,我收到内存错误.
如何减小矩阵的大小,使其变成适合屏幕的图像,而不会丢失唯一性/数据?
此外,我如何将其变成灰度图像?
任何帮助或建议将不胜感激.谢谢.
JBe*_*rdo 20
你的"二进制值"数组是一个字节数组?
如果是这样,您可以在调整大小后使用(使用Pillow):
from PIL import Image
im = Image.fromarray(arr)
Run Code Online (Sandbox Code Playgroud)
然后im.show()看看它.
如果你的数组只有0和1(1位深度或黑白),你可能需要将它乘以255
im = Image.fromarray(arr * 255)
Run Code Online (Sandbox Code Playgroud)
这是一个例子:
>>> arr = numpy.random.randint(0,256, 100*100) #example of a 1-D array
>>> arr.resize((100,100))
>>> im = Image.fromarray(arr)
>>> im.show()
Run Code Online (Sandbox Code Playgroud)

编辑(2018年):
这个问题写于2011年,Pillow因为mode='L'在加载时需要使用参数而改变了fromarray.
同样在下面的评论中也说arr.astype(np.uint8)需要,但我还没有测试过
实际上不需要使用PIL,您可以使用pyplot直接绘制数组(见下文).要保存到文件,您可以使用plt.imsave('fname.png', im).

代码如下.
import numpy as np
import matplotlib.pyplot as plt
x = (np.random.rand(1754**2) < 0.5).astype(int)
im = x.reshape(1754, 1754)
plt.gray()
plt.imshow(im)
Run Code Online (Sandbox Code Playgroud)
您还可以使用plt.show(im)在新窗口中显示图像.