昨天我們學會了如何進行影像色彩空間的轉換,
今天要更進一步來看看「如何拆解影像的 BGR 色彩通道」。
掌握通道拆分能幫助我們針對單一顏色進行操作,像是紅色物件偵測、藍色過濾等,
是後續電腦視覺中非常常見的技巧!
✅ 拆分 BGR 三個通道
✅ 單獨顯示各通道內容
✅ 合併通道回原圖
和前幾天一樣,準備一張彩色圖片(image.jpg
)放在同一資料夾:
import cv2
img = cv2.imread('image.jpg') # 讀取圖片(BGR格式)
b, g, r = cv2.split(img)
這行程式會將一張 3 通道的彩色圖片,分離成 3 張單通道的灰階圖:
b
:藍色通道g
:綠色通道r
:紅色通道cv2.imshow('Blue Channel', b)
cv2.imshow('Green Channel', g)
cv2.imshow('Red Channel', r)
cv2.waitKey()
cv2.destroyAllWindows()
每張通道圖其實是灰階圖,顏色越白代表該通道的強度越高。
在「DAY 3:影像的屬性」中,我們曾查看指定像素的 BGR 值。
現在再拆分通道並放大同一位置,可以觀察每個通道的對應強度一致性:
若你拆解完通道、進行了處理後想重新合併,可以使用 cv2.merge
:
merged = cv2.merge([b, g, r])
cv2.imshow('合併後圖片', merged)
cv2.waitKey()
cv2.destroyAllWindows()
💡 注意:合併順序必須正確(B, G, R),否則顏色會錯亂!
如果你想只保留某個顏色,其他通道設為 0,可以這樣做:
import numpy as np
zeros = np.zeros_like(b) # 建立與通道大小相同的黑圖
only_red = cv2.merge([zeros, zeros, r])
only_green = cv2.merge([zeros, g, zeros])
only_blue = cv2.merge([b, zeros, zeros])
cv2.imshow('R', only_red)
cv2.imshow('G', only_green)
cv2.imshow('B', only_blue)
cv2.waitKey()
cv2.destroyAllWindows()
這樣就可以看到只顯示單一顏色通道的彩圖版本!
今天我們學會了如何:
cv2.split()
拆解圖片通道cv2.merge()
合併回彩圖這些技巧對於後續的色彩處理、影像遮罩、特定顏色篩選等應用都非常重要,
記得多加練習,並觀察不同圖片的通道分佈特徵!