1. 程式人生 > >OpenCV 之 顏色空間

OpenCV 之 顏色空間

RGB是從顏色發光的原理來設計定的,通俗點說它的顏色混合方式就好像有紅、綠、藍三盞燈,當它們的光相互疊合的時候,色彩相混,而亮度卻等於兩者亮度之總和,越混合亮度越高,即加法混合。

紅、綠、藍三個顏色通道每種色各分為256階亮度,在0時“燈”最弱——是關掉的,而在255時“燈”最亮。當三色灰度數值相同時,產生不同灰度值的灰色調,即三色灰度都為0時,是最暗的黑色調;三色灰度都為255時,是最亮的白色調。

在電腦中,RGB的所謂“多少”就是指亮度,並使用整數來表示。通常情況下,RGB各有256級亮度,用數字表示為從0、1、2...直到255。注意雖然數字最高是255,但0也是數值之一,因此共256級。
256 x 256 x 256 = 16,777,216

在 OpenCV 中有超過 150 中進行顏色空間轉換的方法。但是你以後就會發現我們經常用到的也就兩種: BGR$Gray 和 BGR$HSV。我們要用到的函式是: cv2.cvtColor(input_image, flag),其中 flag就是轉換型別。

對於 BGR$Gray 的轉換,我們要使用的 flag 就是 cv2.COLOR_BGR2GRAY。同樣對於 BGR$HSV 的轉換,我們用的 flag 就是 cv2.COLOR_BGR2HSV。

 

image = imread('image.jpg')
(R, G, B) = cv2.split(image)
zeros = np.zeros(image.shape[:2],dtype='uint8')
show(cv2.merge([R,zeros,zeros]))
show(cv2.merge([zeros,G,zeros]))
show(cv2.merge([zeros,zeros,B]))

HSV

HSV是一種比較直觀的顏色模型,HSV顏色空可以更好的數字化處理顏色。這個模型中顏色的引數分別是:色調(H, Hue),飽和度(S,Saturation),明度(V, Value)。

色調H:

用角度度量,取值範圍為0°~360°,從紅色開始按逆時針方向計算,紅色為0°,綠色為120°,藍色為240°。它們的補色是:黃色為60°,青色為180°,品紅為300°

飽和度S:

飽和度S表示顏色接近光譜色的程度。一種顏色,可以看成是某種光譜色與白色混合的結果。其中光譜色所佔的比例愈大,顏色接近光譜色的程度就愈高,顏色的飽和度也就愈高。飽和度高,顏色則深而豔。光譜色的白光成分為0,飽和度達到最高。通常取值範圍為0%~100%,值越大,顏色越飽和。

明度V:

明度表示顏色明亮的程度,對於光源色,明度值與發光體的光亮度有關;對於物體色,此值和物體的透射比或反射比有關。通常取值範圍為0%(黑)到100%(白)

image = imread('image.jpg')
hsv = cv2.cvtColor(image, cv2.COLOR_RGB2HSV)
zeros = np.zeros(image.shape[:2],dtype='uint8')
for (name,chan) in zip(('H','S','V'), cv2.split(hsv)):
    cv2.imshow(name,chan)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

L*a*b*

CIE1976Lab色空間(CIE LAB 色空間),是1976年由國際照明學會(CIE)推薦的均勻色空間。Lab顏色空間用於計算機色調調整和彩色校正。該空間是三維直角座標系統。是目前最受廣用的測色系統。以明度L和色度座標a、b來表示顏色在色空間中的位置。l表示顏色的明度,a正值表示偏紅,負值表示偏綠;b*正值表示偏黃,負值表示偏藍

L* 表示顏色的明度;

a* 正值表示紅色,負值表示綠色;

b* 正值表示黃色,負值表示藍色;

image = imread('image.jpg')
lab = cv2.cvtColor(image, cv2.COLOR_RGB2LAB)
zeros = np.zeros(image.shape[:2],dtype='uint8')
for (name,chan) in zip(('L','A','B'), cv2.split(lab)):
    cv2.imshow(name,chan)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

Grayscale

灰階影象就是黑白圖片,通過調節灰度值來顯示影像

image = cv2.imread('image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('original',image)
cv2.imshow('gray',gray)
cv2.waitKey(0)
cv2.destroyAllWindows()