如何将1d数组转换为3d数组(将灰度图像转换为rgb格式)?

时间:2019-07-18 22:06:29

标签: python arrays numpy numpy-ndarray numpy-broadcasting

我有一个numpy数组格式的图像,我写了代码,假设rgb图像作为输入,但是我发现输入由黑白图像组成。

应该是RGB即(256,256,3)尺寸的图像,我将输入作为灰度(256,256)阵列图像并将其转换为(256,256,3)

这是我在numpy数组中所拥有的:

[[0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 ...
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]]
(256, 256)

这就是我想要的:(相同元素的数组对上面数组中的每个值重复3次)

[[[0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]
  ...
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]]

是否有执行此操作的numpy函数? 如果没有,是否可以在python数组中执行任何操作并将其转换为numpy?

2 个答案:

答案 0 :(得分:1)

您可以使用numpy.dstack沿第三个轴堆叠2D阵列:

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.dstack([a, a, a])

结果:

[[[1 1 1]
  [2 2 2]]
 [[3 3 3]
  [4 4 4]]]

或使用opencv merge函数合并3个颜色通道。

答案 1 :(得分:1)

您可以通过两种方式进行操作:

  1. 您可以为此使用opencv。要将图像从灰度转换为RGB:
import cv2
import numpy as np
gray = np.random.rand(256, 256)
gary2rgb = cv2.cvtColor(gray,cv2.COLOR_GRAY2RGB)
  1. 仅使用numpy,您可以通过以下方式进行操作:
import numpy as np
def convert_gray2rgb(image):
    width, height = image.shape
    out = np.empty((width, height, 3), dtype=np.uint8)
    out[:, :, 0] = image
    out[:, :, 1] = image
    out[:, :, 2] = image
    return out

gray = np.random.rand(256, 256)  # gray scale image
gray2rgb = convert_gray2rgb(gray)