ValueError:无法将形状(128,128,3)的输入数组广播为形状(128,128)

时间:2017-11-08 17:43:23

标签: python numpy image-processing machine-learning

嗨,我正在构建一个图像分类器,这是我代码的一小部分 在这一部分我试图' img_data_list'是一个数组,我正在将此数组转换为np.array但是    (img_ data = np.array(img_data_list)) 这行代码给了我一个错误     (无法将输入数组从形状(128,128,3)广播到形状(128,128))我不知道为什么会发生这种情况

for dataset in data_dir_list:
    img_list=os.listdir(data_path+'/'+ dataset)

    print ('Loaded the images of dataset-'+'{}\n'.format(dataset))

    for img in img_list:
        image_path = os.path.join(data_path, dataset, img)

        input_img=cv2.imread(image_path)

        if input_img is not None:
            input_img_resize=cv2.resize(input_img,(128,128))
            img_data_list.append(input_img_resize)

        else:
            print(img+' image didnt read')

img_data = np.array(img_data_list)
img_data = img_data.astype('float32')
img_data /= 255

3 个答案:

答案 0 :(得分:2)

我发现解决方案在删除分类器后,数据集中的某些图像已损坏

答案 1 :(得分:0)

我没有使用cv2,但在其他一些地方看到了这个问题。如果列表中的任何一个图像没有预期的大小(224,224,3),则可能会出现上述问题。

另一个类似的SO帖子:ValueError: could not broadcast input array from shape (224,224,3) into shape (224,224)

您可以重新生成数据并尝试吗?

答案 2 :(得分:0)

这种情况发生在您具有期望形状的图像时,如@Rahul Pant所说,可能不是(224,224,3),因为您只检查了第0个元素的形状。我在Image数组中遇到此错误,并且可以通过此代码修复它。

print(len(img_data_list)) #to check the lenght of the list with elements having different shape

for item in img_data_list:
  if item.shape!=(224,224,3):
    img_data_list.remove(item)

print(len(img_data_list)) #you'll know how many corrupt sized images you had