2017-02-13 57 views
0

我想導入一堆圖像,讓他們準備好keras。這裏的目標是具有以下維度的數組。 (長度160,329,3)。正如你所看到的,我的重塑功能被註釋掉了。 「print(images.shape)」這一行返回(8037,)。不知道如何繼續獲取正確的數組維度。csv文件中的第一列是參考圖像的路徑列表。以下功能將文件夾內的圖像路徑和文件夾路徑組合起來導入圖像準備keras

當我運行註釋掉的重塑函數時,出現以下錯誤:「ValueError:無法將大小8037的數組重新整形(8037 ,160,320,3)」

import csv 
import cv2 

f = open('/Users/username/Desktop/data/driving_log.csv') 
csv_f = csv.reader(f) 

m=[] 
for row in csv_f: 
    n=(row) 
    m.append(n) 

images=[] 
for i in range(len(m)): 
    img=(m[i][1]) 
    img=img.lstrip() 
    path='/Users/username/Desktop/data/' 
    img=path+img 
    image=cv2.imread(img) 
    images.append(image) 
item_num = len(images) 
images=np.array(images) 
#images=np.array(images).reshape(item_num, 160, 320, 3) 
print(images.shape) #returns (8037,) 

回答

0

你能打印image的形狀,然後再將其附加到images以驗證它是你期待什麼呢?更妙的是添加在一個imshow什麼循環以確保你正在加載你期望的圖像(只需要做一兩個)。 cv2.imread如果在您提供的文件路徑中沒有圖像,則不會拋出錯誤,因此您的陣列可能全部爲None,這將產生您描述的確切行爲。

如果這是問題,請檢查img變量,並確保它正好指向您想要的位置。

+0

所以圖像的形狀(160,320,3)和打印(images.shape)返回一個錯誤「AttributeError的:‘名單’對象有沒有屬性‘形’」 – Jake3991

+0

@ Jake3991內環路你能使用'plt.imshow'顯示其中一個圖像? – hulleywood

+0

plt.imshow(image)在循環內給出以下錯誤TypeError:圖像數據無法轉換爲浮點數 – Jake3991

0

原來,它包含了標題爲CSV文件的第一行。在我整理出來之後,它運行得非常好。它給了我所需的形狀。

images=[] 
for i in range(1,len(labels)): 
    img=(m[i][1]) 
    img=img.lstrip() 
    path='/Users/user/Desktop/data/' 
    img=path+img 

    image=cv2.imread(img) 
    images.append(image)