Python 将大型矩阵转换为灰度图像
我有一个3076568二进制值(1和0)的NumPy数组。我想将其转换为矩阵,然后转换为Python中的灰度图像 但是,当我尝试将数组重新整形为1538284 x 1538284矩阵时,会出现内存错误 如何减小矩阵的大小,使其变成适合屏幕的图像,而不丢失唯一性/数据 此外,我如何将其转换为灰度图像 任何帮助或建议都将不胜感激。谢谢。您的“二进制值”数组是字节数组吗 如果是这样,可以在调整大小后执行(使用):Python 将大型矩阵转换为灰度图像,python,image,matrix,grayscale,Python,Image,Matrix,Grayscale,我有一个3076568二进制值(1和0)的NumPy数组。我想将其转换为矩阵,然后转换为Python中的灰度图像 但是,当我尝试将数组重新整形为1538284 x 1538284矩阵时,会出现内存错误 如何减小矩阵的大小,使其变成适合屏幕的图像,而不丢失唯一性/数据 此外,我如何将其转换为灰度图像 任何帮助或建议都将不胜感激。谢谢。您的“二进制值”数组是字节数组吗 如果是这样,可以在调整大小后执行(使用): from PIL import Image im = Image.fromarray(a
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年写的,自从使用fromarray
加载时需要使用mode='L'
参数以来,这个问题就发生了变化
同样在下面的评论中,有人说还需要
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)
将numpy导入为np
将matplotlib.pyplot作为plt导入
x=(np.random.rand(1754**2)<0.5).aType(int)
im=x.重塑(17541754)
plt.gray()
plt.imshow(im)
您还可以使用plt.show(im)
在新窗口中显示图像。您可以使用和im.save(“foobar.png”)
:
#/usr/bin/env python
#您的数据是“数组”-我只是为了测试而做的
宽度,高度=512,100
将numpy作为np导入
数组=(np.random.rand(宽*高)<0.5.astype(int)
数组=数组。重塑形状(高度、宽度)
#你需要什么
从scipy.misc导入到图像
im=toimage(阵列)
保存(“foobar.png”)
给
例如,如果您的电脑中有一个包含一些数据(图像)的txt文件,为了将这些数据可视化为灰度图像,您可以使用以下方法:
with open("example.txt", "r") as f:
data = [i.strip("\n").split() for i in f.readlines()]
data1 = np.array(data, dtype=float)
plt.figure(1)
plt.gray()
plt.imshow(data1)
plt.show()
呃。。。3076568值将是~1754x1754图像,而不是1538284x1538284图像。啊。。很晚了,我错了。:-)感谢您指出这一点。在尝试上述示例时,我遇到了一个错误“无法处理此数据类型”。我需要传递mode=“L”like:im=Image.fromarray(arr,mode=“L”)@barbolo-mine没有引发错误,它只是使整个图片变白。但是使用“L”模式修复了它,谢谢!我必须使用
arr.astype(np.uint8)
和mode='L'
(如上所述)来获得正确的输出(请参阅)。
with open("example.txt", "r") as f:
data = [i.strip("\n").split() for i in f.readlines()]
data1 = np.array(data, dtype=float)
plt.figure(1)
plt.gray()
plt.imshow(data1)
plt.show()