【646】灰度圖array轉為RGB三通道array


  兩種方法可以實現:

  • 通過 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)) 

 

  RGB 轉為 灰度圖

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

display(Image.fromarray(gray))

 

  灰度圖轉為 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中判斷兩個數組是否相等


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM