gpt4 book ai didi

python - 如何 reshape 3D numpy 数组?

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:56 25 4
gpt4 key购买 nike

我有一个 numpy 数组列表,它们实际上是我的 CNN 的输入图像。然而,我的每张图像的大小并不一致,我的 CNN 只拍摄尺寸为 224X224 的图像。如何将每个图像 reshape 为给定的尺寸?print(train_images[key].reshape(224, 224,3))

给我一​​个输出

ValueError:新数组的总大小必须不变
如果有人可以帮助我,我将不胜感激。

最佳答案

reshape 时,新数组应具有相同数量的值。您需要的是裁剪图片(如果它大于 224x224)和填充(如果它小于 224x224)或在这两种情况下调整大小。

裁剪就是简单地用正确的索引进行切片:

def crop(np_img, size):
v_start = round((np_img.shape[0] - size[0]) / 2)
h_start = round((np_img.shape[1] - size[1]) / 2)
return np_img[v_start:v_start+size[1], h_start:h_start+size[0],:]

填充稍微复杂一些,这将创建一个所需形状的零数组并在其中插入图像的值:

def pad_image(np_img, size):
v_start = round((size[0] - np_img.shape[0]) / 2)
h_start = round((size[1] - np_img.shape[1]) / 2)

result = np.zeros(size)
result[v_start:v_start+np_img.shape[1], h_start:h_start+np_img.shape[0], :] = np_img

return result

您还可以使用 np.pad它的功能:

def pad_image(np_img, size):
v_dif = size[0] - np_img.shape[0]
h_dif = size[1] - np_img.shape[1]
return np.lib.pad(np_img, ((v_dif, 0), (h_dif, 0), (0, 0)), 'constant', constant_values=(0))

您可能意识到填充在两个函数中有点不同,我不想让问题过于复杂,只是在第二个函数上填充顶部和左侧。双方都在第一个,因为它更容易计算。

最后,为了调整大小,您最好使用另一个库。您可以使用 scipy.misc.imresize ,它非常简单。应该这样做:

imresize(np_img, size)

关于python - 如何 reshape 3D numpy 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44451227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com