【问题标题】:How to append 2 numpy Image Arrays with different dimensions and shapes using numpy如何使用 numpy 附加 2 个具有不同尺寸和形状的 numpy 图像数组
【发布时间】: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,以及相关的stackappend,创建一个多维数组,例如(n_images, height, width, channels) 形状。该数组中的每个图像都必须具有相同的尺寸。没有办法解决它。似乎大多数(如果不是全部的话)ML 包在大小上都假设了类似的一致性。当然,您可以拥有一个不同大小的图像列表,甚至可以从该列表中创建一个对象 dtype 数组,但是如果您不能使用这样的列表进行训练或测试,那又有什么意义呢?

标签: python arrays numpy


【解决方案1】:

如果您不想调整图像大小,请选择最大的一个并将所有图片填充成相同的形状,我曾经在这个问题中回答如何填充:Can we resize an image from 64x64 to 256x256 without increasing the size .

当为所有图像循环运行该脚本时,创建一个列表来保存它们的所有形状。当您想拍摄原始图像时,只需在数组中的索引 x 处拍摄图像并在列表中塑造 x 形状,然后以原始尺寸裁剪填充图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 2019-05-18
    • 2017-03-12
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多