2016-03-06 67 views
0

我发现通过以下两种方式来创建图像的自定义颜色:阵列图像在Python与

使用PIL

from PIL import Image 
import numpy as np 
data = np.arange(1 * 2048).reshape(1, 2048) 
print(data) 
img = Image.fromarray(data, 'RGB') 
img.save('my.png') 

使用Matplotlib

import matplotlib.pyplot as plt 
import matplotlib.cm as cm 
import numpy as np 
plt.imsave('filename.png', np.arange(1 * 2048).reshape(1, 2048)) 

他们两者都很好。但是,我无法使用任何一种方法来跟踪我的数据格式。

我的阵列是二维阵列,其是32x1000

每个元素为0至255。

我希望每个元件被绘制成与返回为下述方法的结果的RGB颜色的像素的数目。

def get_rgb_by_int(rgb_int): 
    return rgb_int & 255, (rgb_int >> 8) & 255, (rgb_int >> 16) & 255 

从本质上讲,我想知道是否有使用相同的阵列,其中现在的每个元素是另一组,它代表[r,g,b]而非int以创建图像的方法。

编辑 打电话得知:这是我有:

print(result.shape) 
>> (32, 1000) 

print(result[0]) 
>> [(7, 0, 0)...(13, 0, 0)] 

我想生成为1000宽32高的图像。第一像素应该是RGB值(7, 0, 0)和第一行的最后一个像素应该是(13, 0, 0)result中的每个元素表示一行。

回答

1

的方式做到这一点是numpy。如果你有一个数组(不要紧,它是如何构建的),看起来像:A = [[R, G, B], [R, G, B], ...,那么你可以做:

import numpy as np 
A = np.array(A).reshape(-1, 3) 

现在A将有形状N x 3,其中3尺寸为RGB。如果你知道最终图像的大小,你可以做

np.array(A).reshape(N, M, 3) 

它会重新塑造你的数组到RGB为你所需要的。然后,一旦你有numpy的数组,你有你在图像的形状阵列可以将其保存为PNG等

+0

你'A'是我,但嵌套在另一个阵列。 'len(A)'总是32.我该如何重塑它? 基本上我有'B = [A,A,...,A]' – Cripto

+0

你需要做的'B = np.array(B)''现在是B'您的数组,你可以重塑。在我上面的例子中做“A.shape”应该告诉你尺寸是多少。在将'B'改为一个numpy数组后,执行'B.shape'会显示出你的形状是正确的。 'len()'不会告诉你有关数组的其他维度的任何信息。 – mprat