天天看點

【OpenCV-Python】9.OpenCV的色彩空間變換前言一、色彩空間變換二、OpenCV-Python資源下載下傳總結

9.OpenCV的色彩空間變換

文章目錄

  • 前言
  • 一、色彩空間變換
    • 1、RGB色彩空間
    • 2、GRAY色彩空間
    • 3、YCrCb色彩空間
    • 4、HSV色彩空間
  • 二、OpenCV-Python資源下載下傳
  • 總結

前言

  色彩空間也稱顔色模型、顔色空間、色彩模型等,它是圖像在計算機内部的一種存儲方式。常見的色彩空間包括RGB、GRAY、XYZ、YCrCb、HSV等。每種色彩空間都有其擅長的問題解決領域。是以在解決具體色彩問題時就需要進行特定的色彩類型空間轉換。

一、色彩空間變換

  OpenCV的cv2.Color()函數用于轉換色彩空間類型。

轉換代碼 說明
cv2.COLOR_BGR2RGB 将BGR色彩空間轉換為RGB色彩空間
cv2.COLOR_BGR2GRAY 将BGR色彩空間轉換為GRAY色彩空間
cv2.COLOR_BGR2YCrCb 将BGR色彩空間轉換為YCrCb色彩空間
cv2.COLOR_BGR2HSV 将BGR色彩空間轉換為HSV色彩空間

1、RGB色彩空間

  RGB色彩空間使用R(Red,紅)、G(Green,綠)、B(Blue,藍)3種基本顔色表示圖像像素。RGB色彩空間中,圖像的每一個像素用一個三元組表示,三元組中的3個值依次表示紅色、綠色和藍色,依次對應R、G、B通道。

  需要注意的是,OpenCV中預設使用BGR色彩空間,它按照B、G、R通道順序表示圖像。

# BGR to RGB
img = cv2.imread('bee.jpg')
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

cv2.imshow('BGR', img)
cv2.imshow('RGB', img_rgb)

k = cv2.waitKey(0)
if k == 27:
    cv2.destroyAllWindows()
elif k == ord('s'):
    cv2.imwrite('img_rgb.png', img_rgb)
    cv2.destroyAllWindows()
           
【OpenCV-Python】9.OpenCV的色彩空間變換前言一、色彩空間變換二、OpenCV-Python資源下載下傳總結

2、GRAY色彩空間

  GRAY色彩空間通常指8位灰階圖像,其顔色取值範圍為[0,255],共256個灰階級。從BGR色彩空間轉換為GRAY色彩空間的計算公式為:Gray = 0.299R + 0.587G + 0.114B,其中,R、G、B為RGB色彩空間中R、G、B通道的圖像。

# BGR to GRAY
img = cv2.imread('bee.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

cv2.imshow('BGR', img)
cv2.imshow('GRAY', img_gray)

k = cv2.waitKey()
if k == 27:
    cv2.destroyAllWindows()
elif k == ord('s'):
    cv2.imwrite('img_gray.png', img_gray)
    cv2.destroyAllWindows()
           
【OpenCV-Python】9.OpenCV的色彩空間變換前言一、色彩空間變換二、OpenCV-Python資源下載下傳總結

3、YCrCb色彩空間

  YCrCb色彩空間用亮度Y,紅色Cr、藍色Cb表示圖像。從BGR色彩空間轉換為YCrCb色彩空間的計算公式為:

Y = 0.299R + 0.587G + 0.114B

Cr = 0.713(R - Y) + delta

Cb = 0.564(B - Y) + delta

其中,delta = 128(8位圖像)、delta = 32767(16位圖像)、delta = 0.5(單精度圖像)

# BGR to YCrCb
img = cv2.imread('bee.jpg')
img_YCrCb = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)

cv2.imshow('BGR', img)
cv2.imshow('GRAY', img_YCrCb)

k = cv2.waitKey()
if k == 27:
    cv2.destroyAllWindows()
elif k == ord('s'):
    cv2.imwrite('img_YCrCb.png', img_YCrCb)
    cv2.destroyAllWindows()
           
【OpenCV-Python】9.OpenCV的色彩空間變換前言一、色彩空間變換二、OpenCV-Python資源下載下傳總結

4、HSV色彩空間

  HSV色彩空間使用色調(Hue,也稱色相)、飽和度(Saturation)、亮(Value)度表示圖像。

  色調H表示顔色,用角度表示,取值範圍為[0°,360°],從紅光開始逆時針方向計算。

  飽和度S表示顔色接近光譜色的程度,或表示光譜色中混入白光的比例。光譜色中白光的比例越低,飽和度越高,顔色越深、豔。光譜色中白光比例為0時,飽和度達到最高。飽和度的取值範圍為[0,1]。

  亮度V表示顔色的明亮的程度,是人眼可感受到的明暗程度,其取值範圍為[0,1]。

【OpenCV-Python】9.OpenCV的色彩空間變換前言一、色彩空間變換二、OpenCV-Python資源下載下傳總結
# BGR to HSV
img = cv2.imread('bee.jpg')
img_HSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

cv2.imshow('BGR', img)
cv2.imshow('HSV', img_HSV)

k = cv2.waitKey()
if k == 27:
    cv2.destroyAllWindows()
elif k == ord('s'):
    cv2.imwrite('img_HSV.png', img_HSV)
    cv2.destroyAllWindows()
           
【OpenCV-Python】9.OpenCV的色彩空間變換前言一、色彩空間變換二、OpenCV-Python資源下載下傳總結

二、OpenCV-Python資源下載下傳

OpenCV-Python測試用圖檔、中文官方文檔、opencv-4.5.4源碼

總結

  以上内容介紹了OpenCV-Python中幾種色彩空間互相變換的基本操作,有關Python、資料科學、人工智能等文章後續會不定期釋出,請大家多多關注,一鍵三連喲(●’◡’●)。

繼續閱讀