我有一个包含 3,076,568 个二进制值(1 和 0)的 NumPy 数组。我想将其转换为矩阵,然后在 Python 中转换为灰度图像。
但是,当我尝试将数组 reshape 为 1,538,284 x 1,538,284 矩阵时,出现内存错误。
如何减小矩阵的大小,使其变成适合屏幕的图像而不丢失唯一性/数据?
此外,我如何将其转换为灰度图像?
如有任何帮助或建议,我们将不胜感激。谢谢。
最佳答案
您的“二进制值”数组是字节数组吗?
如果是这样,您可以在调整大小后执行(使用 Pillow ):
from PIL import Image
im = Image.fromarray(arr)
然后 im.show()
就可以看到了。
如果您的数组只有 0 和 1(1 位深度或黑白),您可能需要将其乘以 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 年,自从要求在使用 fromarray
加载时使用 mode='L'
参数后,Pillow 发生了变化。
还有下面的评论说 arr.astype(np.uint8)
也是需要的,但我还没有测试过
关于python - 将大矩阵转换为灰度图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7694772/