【发布时间】:2017-08-29 08:56:51
【问题描述】:
假设我有一个维度为 (10, 48, 48, 1) 的 numpy 数组。这里10 代表图像的数量。图片为48x48,单通道1。由于这些是灰度图像,我希望我的数组能够表示。当然这是不可能的,但我想用0 初始化我的其他 2 个频道。那么如何添加其他二维,使我的数组形状变为(10,48,48,3)
【问题讨论】:
假设我有一个维度为 (10, 48, 48, 1) 的 numpy 数组。这里10 代表图像的数量。图片为48x48,单通道1。由于这些是灰度图像,我希望我的数组能够表示。当然这是不可能的,但我想用0 初始化我的其他 2 个频道。那么如何添加其他二维,使我的数组形状变为(10,48,48,3)
【问题讨论】:
如果你使用的是 opencv,你可以使用 cv2.cvtcolor 例如:
img = np.zeros((255,255), dtype = np.uint8)
print(img.shape)
color_channeled_image = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
print(color_channeled_image.shape)
你的输出:
(255,255)
(255,255,3)
【讨论】:
你也可以使用np.pad
pad = ((0,0),)*3 + ((0,2),)
imgs = np.pad(imgs, pad, 'constant', constant_values = 0)
imgs.shape
(10, 288, 288, 3)
如果不是用零填充而是可以重复值,您也可以使用np.broadcast_to(如果您想写入,请务必制作一份副本)
imgs = np.broadcast_to(imgs, (10, 48, 48, 3)).copy()
【讨论】:
创建 zeros 数组并沿最后一个轴连接 -
z = np.zeros(imgs.shape[:-1] + (2,), dtype=imgs.dtype)
imgs_out = np.concatenate((imgs, z), axis=-1)
示例运行 -
In [157]: imgs = np.random.randint(0,255,(10,48,48,1)) # input
In [158]: z = np.zeros(imgs.shape[:-1] + (2,), dtype=imgs.dtype)
In [159]: np.concatenate((imgs, z), axis=-1).shape
Out[159]: (10, 48, 48, 3)
【讨论】: