两种方法可以实现:

  • 通过 numpy 自己实现
  • 通过 cv2.cvtColor 函数实现,灰度图转 RGB

  所谓的灰度图转为三通道,就是三个通道都是一样的信息,相当于相同维度信息的重复,主要是通过 numpy.array 来实现,其实是可以通过类似广播的形式来实现。

1. 每一行赋值相同的内容

>>> a = np.zeros((3,3))
>>> a
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])
>>> b = np.arange(3)
>>> b
array([0, 1, 2])
>>> a[:, :] = b   # 等价于 a[...] = b
>>> a
array([[0., 1., 2.],
       [0., 1., 2.],
       [0., 1., 2.]])

 

2. 每一列赋值相同的内容

>>> a = np.zeros((3,3))
>>> a
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])
>>> b = np.arange(3)
>>> b
array([0, 1, 2])
>>> c = b.reshape((3,1))
>>> c
array([[0],
       [1],
       [2]])
>>> a[...] = c
>>> a
array([[0., 0., 0.],
       [1., 1., 1.],
       [2., 2., 2.]])

 

3. 灰度图转为RGB三通道

  • 灰度图是二维数据,首先通过 np.expand_dims() 增加一个维度
  • 然后直接通过赋值即可以填充其他三个通道为相同的信息

  原图的 RGB 显示

import cv2 
from PIL import Image

img = cv2.imread("yingmu.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

display(Image.fromarray(img)) 

【546】灰度图array转为RGB三通道array_函数实现

 

  RGB 转为 灰度图

 gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

display(Image.fromarray(gray))
 

【546】灰度图array转为RGB三通道array_赋值_02

 

  灰度图转为 RGB

# 通过 cv2 函数
img = cv2.cvtColor(gray, cv2.COLOR_GRAY2RGB)

# 通过 numpy 实现
img_arr = np.zeros_like(img)
img_arr[...] = np.expand_dims(gray, axis=-1)

# 用来判断两者是否相同,结果是 True
(img == img_arr).all()

  关于判断两个 numpy.array 是否相同参考博文:Numpy中判断两个数组是否相等