1. 程式人生 > >python實現圖片讀取為向量詳解

python實現圖片讀取為向量詳解

最近在實現cnn對於一系列圖片的識別,於是就上網瞭解了一下圖片讀取的內容並整合一下。 在這裡用了python3.6版本 使用的第三方庫也只有numpy和PIL這兩個庫,所以上手很快。 下面按步驟詳解: 第一: 匯入這兩個庫

from PIL import Image
import numpy as np

然後我們先用PIL的讀取圖片的方法讀取圖片:

m = Image.open('D:\python作業\ONE\imgList//精美lomo風格美女薈萃.jpg')

其中

D:\python作業\ONE\imgList//精美lomo風格美女薈萃.jpg

是檔案路徑。m是臨時儲存物件。 因為有些圖片讀取後的矩陣不止gbk三種內容,所以我們可以先執行一次下面的程式碼

print(xl.split())

結果會是一個含有三種元素的元組,像下面這種:

(<PIL.Image.Image image mode=L size=1024x640 at 0x1E8956351D0>, <PIL.Image.Image image mode=L size=1024x640 at 0x1E8956354E0>, <PIL.Image.Image image mode=L size=1024x640 at 0x1E895635518>)

因為之前碰到過四種元素的圖片,所以搞了有點久,所以建議先執行一次,然後記住圖片的大小,我這裡是1024*640,結果為655360,這個對之後將陣列轉化為向量有用。 接著用臨時變數來儲存上面的內容:

g,b,k = xl.split()

如果有四種只有在等號左邊加臨時變數即可。 然後用numpy的方法改變維度,具體用法百度numpy用法即可

np.array(g).reshape(1,655360)[0]
np.array(b).reshape(1,655360)[0]
np.array(k).reshape(1,655360)[0]

其中np.array(g)就是將之前得到的內容以陣列的形式顯示,然後為了之後的拼接,我用【0】提出了陣列的元素 然後用numpy中拼接陣列的方法來拼接:

np.concatenate((np.array(g).reshape(1,655360)[0],np.array(b).reshape(1,655360)[0],np.array(k).reshape(1,655360)[0]))

這裡注意concatenate方法後面是有兩個括號的,一個會報錯,一定要把元素圈起來。 然後就能得到我們要的圖片向量。