2017-02-13 101 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)