2016-03-06 92 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