『OpenCV-Python』色彩空間及色彩轉換

德育处主任發表於2024-11-21

點贊 + 關注 + 收藏 = 學會了

在計算機影像處理中,色彩空間是理解和操作影像色彩的重要基礎。每一種色彩空間都有自己的適用範圍。RGB 是比較常見的色彩空間,除此之外比較常見的色彩空間還有 GRAY、HSV、Lab、YUV 等。

為什麼會有這麼多色彩空間呢?有相容性的原因,也有為了方便計算的原因。比如 YUV 這個是電視訊號系統採用的,以前的老電視是黑白電視,只需要一個顏色通道,後來出現了彩色電視,為了使影片訊號能夠相容黑白電視和彩色電視,就將 RGB 專橫 YUV,其中 Y通道 是影像的亮度,黑白電視只需要使用這個通道就能顯示出黑白影像了,而彩色電視需要將 YUV 轉成 RGB 來顯示。

我們都知道 RGB 表示「紅綠藍」三種顏色,一個畫素包含 RGB 3個通道,將這3個通道融合可以渲染出不同的顏色。但 RGB 三個通道融合的值很難去直觀看出到底是什麼顏色。如果要做一個摳圖功能,顯然用 HSV(H色相、S飽和度、V明度) 會更合適。

所以就出現了這麼多種色彩空間。

色彩空間轉換方法

有時為了計算方便,會將圖片的顏色空間轉換成別的型別。

OpenCV 提供了 cv2.cvtColor() 方法可以實現不同色彩空間之間的轉換。例如,將 RGB 轉換為 HSV、LAB 或 YUV,或者反向轉換,都可以透過該函式實現。

常見的色彩空間轉換
  • cv2.COLOR_BGR2RGB:BGR 轉 RGB
  • cv2.COLOR_BGR2HSV:BGR 轉 HSV
  • cv2.COLOR_BGR2LAB:BGR 轉 LAB
  • cv2.COLOR_BGR2YUV:BGR 轉 YUV
  • cv2.COLOR_RGB2BGR:RGB 轉 BGR
  • cv2.COLOR_HSV2BGR:HSV 轉 BGR
  • cv2.COLOR_BGR2GRAY:RGB 轉 GRAY

在 OpenCV 中,影像的預設色彩空間通常是 BGR(藍、綠、紅),與 RGB 的差別僅在於通道順序。

cv2.cvtColor() 接收3個引數。

cv2.cvtColor(src, code[, dstCn]) -> dst
  • src:要處理的影像。
  • code:色彩空間轉換程式碼,比如 cv2.COLOR_BGR2HSV
  • dstCn:目標通道數,可選。如果要指定通道數,這個值必須是整數。

舉個例子,將一張 RGB 的圖片轉成灰度圖(GRAY)。

![上傳中...]()

import cv2

# 讀取影像
image = cv2.imread("example.png")  # 替換為影像的路徑

# 將 BGR 轉換為灰度圖
grayImg = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 展示原圖
cv2.imshow("Image", image)
# 展示灰度圖
cv2.imshow("GrayImg", grayImg)

cv2.waitKey(0)
cv2.destroyAllWindows()

點贊 + 關注 + 收藏 = 學會了

相關文章