2010-04-17 176 views
109

我已經創建了一個陣列正是如此:如何將numpy數組轉換爲(並顯示)圖像?

import numpy as np 
data = np.zeros((512,512,3), dtype=np.uint8) 
data[256,256] = [255,0,0] 

我想這個做的是在512×512圖像的中心顯示一個紅點。 (至少從頭開始...我想我可以從那裏找出其餘的部分)

+1

參見http://stackoverflow.com/questions/902761/saving-a-numpy-array-as-儘管那個人強加了PIL不能使用的限制。 – 2010-04-17 18:01:47

回答

96

你可以使用PIL創建(和顯示)的圖像:

from PIL import Image 
import numpy as np 

w, h = 512, 512 
data = np.zeros((h, w, 3), dtype=np.uint8) 
data[256, 256] = [255, 0, 0] 
img = Image.fromarray(data, 'RGB') 
img.save('my.png') 
img.show() 
+0

這工作很好。謝謝。 – jlswint 2010-04-17 18:23:11

+2

似乎有一個錯誤。你創建的數組大小爲'(w,h,3)',但它應該是'(h,w,3)',因爲PIL中的索引與numpy中的索引不同。有相關的問題:http:// stackoverflow。com/questions/33725237/image-fromarray-changes-size – user502144 2015-12-06 18:57:20

+0

@ user502144:謝謝你指出我的錯誤。我應該創建一個形狀數組''(h,w,3)'。 (現在已經固定,在上面)。第一個軸的長度可以被認爲是數組中的行數,第二個軸的長度是列數。因此'(h,w)'對應於一個「高度」「h」和「寬度」「w」的數組。 'Image.fromarray'將這個數組轉換成高度爲'h'和寬度爲'w'的圖像。 – unutbu 2015-12-06 20:47:59

0

使用pygame,您可以打開一個窗口,以一個像素數組的形式獲取曲面,然後根據需要進行操作。您需要將您的numpy數組複製到曲面數組中,然而,這比在pygame曲面上進行實際的圖形操作要慢得多。

40

最短路徑使用scipy,像這樣:

from scipy.misc import toimage 
toimage(data).show() 

這需要安裝PIL或Pillow。

類似的方法也需要PIL或枕頭但可以調用不同的觀衆是:

from scipy.misc import imshow 
imshow(data) 
+0

所以這種方法是不符合python 3.5 ...? – bordeo 2016-02-05 23:48:56

+0

@bordeo,爲什麼它會與3.5不兼容?它只是一個導入和一些函數調用。 – 2016-02-06 15:32:33

+0

PIL與3.5不兼容(不會安裝) – bordeo 2016-02-06 17:19:21

145

你剛纔說這個?

from matplotlib import pyplot as plt 
plt.imshow(data, interpolation='nearest') 
plt.show() 
+2

這比PIL更準確。 PIL重新調整/標準化數組值,而pyplot原樣使用實際的RGB值。 – GaryO 2013-01-27 14:08:41

+2

謝謝!值得最好的答案徽章! – 2016-01-24 09:28:04

+9

也許很高興知道:如果要顯示灰度圖像,建議您在代碼中調用'plt.gray()'一次將所有以下圖形切換爲灰度。不是OP想要什麼,但很高興知道。 – Cerno 2017-02-28 12:21:46

相關問題