圖像處理基礎:顏色空間及其OpenCV實現

點擊上方「AI公園」,關注公衆號,選擇加「星標「或「置頂」web


做者:Soumyadip Sarkarchrome

編譯:ronghuaiyang
數組

導讀

對圖像的顏色空間作了一個概念性的介紹,並經過代碼的方式可視化了每種顏色空間的每一個通道所表示的意義。微信

文章內容包括:
編輯器

  • 什麼是顏色空間?
  • 顏色空間有哪些類別?
  • 如何在OpenCV中實現?

什麼是顏色空間?

顏色是一種連續的現象,它意味着有無數種顏色。可是,人類的眼睛和感知能力是有限的。因此,爲了識別這些顏色,咱們須要一種媒介或這些顏色的表示,這種顏色的表示被稱爲色彩空間。在技術術語中,一個顏色模型或顏色空間是一個特定的3-D座標系統以及該系統中的一個子空間,其中每一種顏色都由一個單點表示。函數

有哪些顏色空間的類型?

目前主要有五種類型的顏色模型。可是,我將只寫一些常見的(RGB、HSV和HSL)。spa

  1. RGB(Red Green Blue)
  2. HSL(Hue Saturation Lightness)
  3. HSV(Hue Saturation Value)
  4. YUV(Luminance, blue–luminance, red–luminance)
  5. CMYK(Cyan, Magenta, Yellow, Key)

RGB顏色空間:

RGB顏色空間是三維座標系中紅、綠、藍座標所表示的著名顏色空間之一。在更專業的術語中,RGB將顏色描述爲由三個部分組成的元組。每一個部分均可以取0到255之間的值,其中元組(0,0,0)表示黑色,元組(255,255,255)表示白色。元組的第0、第1和第2個部分分別表示紅、綠、藍的份量。.net

RGB顏色空間的Python實現:

這裏咱們導入了必要的庫,cv2用於顏色空間轉換,NumPy用於數組操做,Matplotlib用於顯示圖像,os用於訪問圖像目錄,tqdm用於顯示加載欄。3d

hsl_img = cv2.cvtColor(X[0],cv2.COLOR_BGR2HLS)  #### CONVERTING BGR COLOR SPACE INTO HSL COLOR SPACE  ####
hsl_img_1 = hsl_img.copy()
hsl_img_2 = hsl_img.copy()
hsl_img_3 = hsl_img.copy()
hsl_img_1[:,:,1] = 0  #### HUE --> ZERO  ####
hsl_img_1[:,:,2] = 0
hsl_img_2[:,:,0] = 0  #### SATURATION --> ZERO ####
hsl_img_2[:,:,2] = 0
hsl_img_3[:,:,0] = 0  #### LIGHTNESS --> ZERO ####
hsl_img_3[:,:,1] = 0

設置兩個空列表Z和X,分別用於存儲帶有各自圖像的標籤,而後指定圖像大小和路徑目錄。在這以後,我定義了兩個函數,用於返回flower類型(assign_lable)和訪問每一個圖像、讀取和調整其大小(make_train_data)。code

Z,X=[],[]
IMG_SIZE=150
FLOWER_SUNFLOWER_DIR='../input/flowers-recognition/flowers/flowers/sunflower'

def assign_label(img,flower_type):
    return flower_type

def make_train_data(flower_type,DIR):
    for img in tqdm(os.listdir(DIR)):
        label=assign_label(img,flower_type)
        path = os.path.join(DIR,img)
        img = cv2.imread(path,cv2.IMREAD_COLOR)
        img = cv2.resize(img, (IMG_SIZE,IMG_SIZE))#Resizing the image

加載圖像,而後在OpenCV以BGR格式讀取圖像時將BGR顏色空間轉換爲RGB顏色空間,但Maplotlib使用RGB格式來顯示圖像。這就是爲何咱們須要轉換顏色空間後,讀取圖像爲RGB。

而後對固定圖像進行三份拷貝,並將每份拷貝的任何雙色通道設爲零,分別用於訪問紅、綠、藍通道。若是你讓第0個顏色通道都是0那麼你只會獲得藍色通道。

make_train_data('Sunflower',FLOWER_SUNFLOWER_DIR)  #####Loading Sunflower Data
fix_img = cv2.cvtColor(X[0],cv2.COLOR_BGR2RGB)    ###########CONVERTING BGR COLOR SPACE INTO RGB COLOR SPACE #########
new_img_1 = fix_img.copy() 
new_img_2 = fix_img.copy()
new_img_3 = fix_img.copy()
new_img_1[:,:,0] = 0 # making R channel zero    ####For BLUE channel#####
new_img_1[:,:,1] = 0 #making G channel zero
new_img_2[:,:,1] = 0####For RED color Channel####
new_img_2[:,:,2] = 0
new_img_3[:,:,0] = 0###For GREEN Channel####
new_img_3[:,:,2] = 0

顯示圖像:

f, axes = plt.subplots(1,3, figsize = (15,15))
list = [new_img_1,new_img_2,new_img_3]
i = 0
for ax in axes:
    ax.imshow(list[i])
    i+=1

HSL顏色空間:

HSL的通常含義是色調、飽和度和明度。你能夠將HSL以圓柱體的形式可視化,如圖2(a)所示。圍繞圓柱體的是不一樣的顏色,好比綠色、黃色、紅色等等(咱們真正想要的顏色)。飽和度是指顏色的多少,而明度是指顏色有多暗或多亮。正如你所看到的,圓柱體的頂部全是白色,底部全是黑色。

圖2:HSL顏色空間

HSL顏色空間的Python實現:

使用OpenCV函數**cvtColor()**將BGR顏色空間轉換爲HSL顏色空間,在這裏咱們須要傳遞圖像,以及從哪一個顏色空間到哪一個顏色空間咱們想要改變圖像。而後再複製並使兩個顏色通道爲零,以便分別顯示每一個顏色通道。

hsl_img = cv2.cvtColor(X[0],cv2.COLOR_BGR2HLS)  #### CONVERTING BGR COLOR SPACE INTO HSL COLOR SPACE  ####
hsl_img_1 = hsl_img.copy()
hsl_img_2 = hsl_img.copy()
hsl_img_3 = hsl_img.copy()
hsl_img_1[:,:,1] = 0  #### HUE --> ZERO  ####
hsl_img_1[:,:,2] = 0
hsl_img_2[:,:,0] = 0  #### SATURATION --> ZERO ####
hsl_img_2[:,:,2] = 0
hsl_img_3[:,:,0] = 0  #### LIGHTNESS --> ZERO ####
hsl_img_3[:,:,1] = 0

如今顯示三個不一樣的顏色通道→

f, axes = plt.subplots(1,3, figsize = (15,15))
list = [hsl_img_1,hsl_img_2,hsl_img_3]
i = 0
for ax in axes:
    ax.imshow(list[i])
    i+=1

HSV顏色空間:

HSV這個名字來自於顏色模型的三個座標,即色相、飽和度和值。它也是一個圓柱形的顏色模型,圓柱體的半徑表示飽和度,垂直軸表示值,角度表示色調。對於觀察者,色調是占主導地位的,飽和度是混合到色調中的白光的數量,value是chrome的強度,value較低顏色變得更加相似於黑色,value越高,顏色變得更加像顏色自己。經過改變這些參數,咱們能夠生成不一樣的顏色。

圖3:HSV顏色空間

HSV顏色空間的Python實現:

使用cvtColor()函數將色彩空間轉換爲HSV色彩空間。而後再複製並使兩個通道置爲零,以便分別顯示每一個通道。

hsv_img = cv2.cvtColor(X[0],cv2.COLOR_BGR2HSV)
hsv_img_1 = hsv_img.copy()
hsv_img_2 = hsv_img.copy()
hsv_img_3 = hsv_img.copy()
hsv_img_1[:,:,1] = 0#HUE --> ZERO
hsv_img_1[:,:,2] = 0
hsv_img_2[:,:,0] = 0#SATURATION --> ZERO
hsv_img_2[:,:,2] = 0
hsv_img_3[:,:,0] = 0#VALUE --> ZERO
hsv_img_3[:,:,1] = 0

單獨顯示每一個顏色通道:


END

英文原文:https://medium.com/analytics-vidhya/image-processing-series-part1-colorspaces-836d2e3ca700

請長按或掃描二維碼關注本公衆號

喜歡的話,請給我個在看吧


本文分享自微信公衆號 - AI公園(AI_Paradise)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索