【发布时间】:2019-11-26 22:30:35
【问题描述】:
我正在制作一个输入数据集,该数据集将包含数千张图像,这些图像的大小不同,但通道数相同。我需要将这些不同的图像合并到一个堆栈中。
orders = (channels, size, size)
Image sizes = (3,240,270), (3,100,170), etc
我已经尝试将它附加到 0 轴和 1 轴并插入。
Images = append(Images, image, axis = 0)
File "d:/Python/advanced3DFacePointDetection/train.py", line 25, in <module>
Images = np.append(Images, item, axis=0)
File "C:\Users\NIK\AppData\Roaming\Python\Python37\site-packages\numpy\lib\function_base.py", line 4694, in append
return concatenate((arr, values), axis=axis)
ValueError: all the input array dimensions except for the concatenation axis must match exactly
理想的输出形状就像 (number of images, 3) 3 for number of channels and it contains different shape of images.
【问题讨论】:
-
您是否可以在较小的图像上使用黑色边框?或者我们可以在不考虑纵横比的情况下调整图像大小吗?由于您正在使用图像训练模型,因此最好将所有图像调整为较小的尺寸并进行训练。
-
我有另一个 X 和 Y 点数据集,所以如果我调整其中任何一个的大小,我的整个数据集都需要调整。因此,没有调整大小或较小的图像。对不起。
-
因此,您可能需要填充较小的图像以匹配较大图像的尺寸。检查这个答案 - stackoverflow.com/a/41916066/6561141
-
我会调查的,干杯伙伴
-
np.concatenate,以及相关的stack和append,创建一个多维数组,例如(n_images, height, width, channels)形状。该数组中的每个图像都必须具有相同的尺寸。没有办法解决它。似乎大多数(如果不是全部的话)ML 包在大小上都假设了类似的一致性。当然,您可以拥有一个不同大小的图像列表,甚至可以从该列表中创建一个对象 dtype 数组,但是如果您不能使用这样的列表进行训练或测试,那又有什么意义呢?