numpy 无法将大小为983040的数组重新整形为形状(320,320,1)

7kjnsjlb  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(157)
img_size = 320
def load_img(path):
img = Image.open(path)
if img is None:
    raise ValueError(f"Empty Image at {path}")
img = img.convert("RGB")
return img
def load_data(path_list, gray=False, img_size=256):
data = []
for path in tqdm(path_list):
    img = load_img(path)
    if gray:
        img = img.convert("L")
    img = img.resize((img_size, img_size))
    img_array = np.array(img)
    if gray:
        img_array = img_array.reshape((img_size, img_size, 1))
    data.append(img_array)
return np.array(data)
X_train= load_data([images_dir +"/"+ x for x in X_train])

X_test= load_data([images_dir +"/"+ x for x in X_test])
Y_train= load_data([masks_dir + '/' + x for x in y_train], gray=True)/255.0
Y_test= load_data([masks_dir + '/' + x for x in y_test], gray=True)/255.0
Y_train= Y_train.reshape( -1,img_size, img_size, 1)

错误

----> 1 Y_train= Y_train.reshape( -1,img_size, img_size, 1)
  2 
  3 

ValueError: cannot reshape array of size 983040 into shape (320,320,1)

当我保持图像大小256然后代码运行良好,但当我改变它小于256或大于320它产生错误,有人能告诉我什么是问题

n3h0vuf2

n3h0vuf21#

  • 您尝试重新整形的数组的大小由它包含的元素数决定。在这个例子中,数组的大小是983040,它是通过将数组的维数相乘计算出来的:320 * 320 * 1 = 102400
  • 您需要确保数组的大小与所需的形状匹配。在代码中,在将图像转换为数组之前,先将其调整为特定大小(img_size)。如果要将数组重新整形为(320, 320, 1),则需要确保调整大小后的图像的尺寸为320x320
  • 你说当图像大小为256时代码运行良好,然后它说你正在处理的原始图像的尺寸为256x256。如果要将图像大小更改为小于256或大于320,则需要确保原始图像的尺寸与所需大小匹配。
  • 或者,您可以修改代码,根据图像的实际大小动态调整整形操作,以处理不同大小的图像。这样,您就不会在更改图像大小时遇到错误。

相关问题