【问题标题】:How can I add channel in an image array?如何在图像阵列中添加通道?
【发布时间】:2017-08-29 08:56:51
【问题描述】:

假设我有一个维度为 (10, 48, 48, 1) 的 numpy 数组。这里10 代表图像的数量。图片为48x48,单通道1。由于这些是灰度图像,我希望我的数组能够表示。当然这是不可能的,但我想用0 初始化我的其他 2 个频道。那么如何添加其他二维,使我的数组形状变为(10,48,48,3)

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    如果你使用的是 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)
    

    【讨论】:

      【解决方案2】:

      你也可以使用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()
      

      【讨论】:

        【解决方案3】:

        创建 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)
        

        【讨论】:

          猜你喜欢
          • 2021-05-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-25
          • 2012-12-16
          • 2020-06-23
          相关资源
          最近更新 更多