一、學習目標
- 了解什么是色彩空間
- 了解opencv中色彩空間的轉換
目錄
[python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld
[【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的helloworld
[[python opencv 計算機視覺零基礎到實戰] 三、numpy與圖像編輯] 一、opencv的helloworld
[[python opencv 計算機視覺零基礎到實戰] 四、了解色彩空間及其詳解] 一、opencv的helloworld
[[python opencv 計算機視覺零基礎到實戰] 五、對象追蹤] 一、opencv的helloworld
如有錯誤歡迎指出~
二、了解OpenCV中常見的色彩空間
2.1 什么是色彩空間
色彩空間又可以叫做色域,英文是Color Sapce,是一種人為建立,用于表示色彩的一種“坐標系統”,或者說是一種色彩訪問的取值系統,用于描述色彩。了解色彩空間對我們今后使用opencv進行圖像處理很重要,在今后對圖像處理時將會涉及到色彩空間的內容,所以學習了解色彩空間是有必要的。
2.2 RGB顏色空間
首先我們了解RGB顏色空間,RGB顏色空間常用于顯示器。我們在之前的學習中,已經了解了計算機中的圖片也是由RGB值進行描述的。RGB利用了三種物理學中的三原色,相互進行疊加融合,生成各式各樣的顏色,最終構成一張多彩圖像。
在RGB中,三種顏色每種都有一個通道,并且值小,則越黑,值大則越亮。我們在之前的學習中,通過實踐已經知道通道都為0則為黑,通道都為255則為白,取中間值147則為灰,這也是由于“值小,則越黑,值大則越亮”這個原因。
RGB色彩空間用一個正方體進行描述,這個正方體是笛卡爾積。笛卡爾積是指兩個集合進行相乘而得到的所有有可能的序列,這個序列用笛卡爾坐標系進行表示。由于在opencv中,RGB的數據類型為uint8,那么就可以有256256256=16777216種顏色,這些顏色都在這個笛卡爾坐標系中進行表示。
以下是RGB的色彩空間圖,圖片來源于網絡。
以上圖只能查看一面,其實在該立方體中,有3個定點表示三原色,也就是紅、綠、藍;還有3個頂點表示品紅、黃以及青;與原點(0,0)距離最遠的頂點顏色為白色,其中灰度則為黑色頂點與白色頂點形成的連線的橫縱豎坐標數值大小相等的位置。
2.3 HSV顏色空間
HSV顏色空間是一種表示色調、飽和度以及亮度的顏色空間,其中H(hue)指的是色調,就是平常一些顏色,如黃色、綠色、紅色等;S(saturation)指的是飽和度、V(value)指的是亮度。HSV是一種更接近于人類感知的一種顏色空間,它是根據人對色彩的觀察從而產生的。
其中H色調是描述純色,S飽和度是與白光疊加后的描述。
以下是HSV的色彩空間圖,圖片來源于網絡。
從圖中得知,色調Hue的取值為0到360,但是在opencv中取值為0-180,這點是有一定區別;S飽和度S取值范圍為0.0~1.0,在opencv中取值為0-255;V亮度取值范圍為0.0-1.0,在opencv在opencv中取值為0-255,0則是為黑,255則是為白。從圖中我們可以得知,Value值越小則越黑,Hue則是色彩范圍,S則是值越大顏色更加純。
有一個與HSV非常相似的色彩空間,名為HSL。HSL中的L則表示為Lightness,兩者類似在此不做過多講解。
2.4 YUV顏色空間
YUV是一種色彩的編碼方式,其中Y表示明亮度、U是色度、V是濃度,U和V決定了顏色。YUV一般用于優化視頻信號,如彩色視頻信號的傳輸,使信號能夠與老式的黑白電視進行兼容,并且可以在傳輸時極大的減少頻寬。
以下是YUV的色彩空間圖,圖片來源于網絡。
2.5 opencv 色彩空間的相互轉換
在opencv中,提供了圖像對于不同色彩空間的轉換方法,我們可以通過這些方法對圖像進行不同色彩空間的轉化。首先我們需要讀取一張圖片。代碼如下:
import cv2img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')
cv2.namedWindow("Image",cv2.WINDOW_AUTOSIZE)
cv2.imshow("Image", img)
隨后我們通過cvColor方法對圖片進行不同色彩空間的轉換。cvColor方法接收4個參數,在此講解此節所用到的2個參數,這兩個參數分別是src與dst;src指輸入的圖像,類型為Array;dst指輸入的圖像需要轉換成的色彩空間。我們首先嘗試將改圖片轉換為HSV色彩空間圖。COLOR_BGR2HSV為轉換為HSV色彩空間。我們在以上代碼末行加入以下代碼:
hsvImage=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.imshow("hsvImage", hsvImage)
cv2.waitKey (0)
cv2.destroyAllWindows()
我們接著添加轉換各個色彩空間,查看效果,整體代碼如下:
import cv2img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)
cv2.namedWindow("hsvImage",cv2.WINDOW_NORMAL)
cv2.namedWindow("COLOR_BGR2YUV",cv2.WINDOW_NORMAL)
cv2.namedWindow("COLOR_BGR2GRAY",cv2.WINDOW_NORMAL)hsvImage=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#BGR to HSV
COLOR_BGR2YUV=cv2.cvtColor(img,cv2.COLOR_BGR2YUV)#BGR to YUV
COLOR_BGR2GRAY=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#BGR to GRAYcv2.imshow("Image", img)
cv2.imshow("hsvImage", hsvImage)
cv2.imshow("YUV", COLOR_BGR2YUV)
cv2.imshow("GRAY", COLOR_BGR2GRAY)cv2.waitKey (0)
cv2.destroyAllWindows()
運行結果如下:
GRAY灰度:
HSV:
YUV:
該系列文章首發于易百納
三、總結
- 了解色彩空間是一種對色彩的描述標準
- 了解常見色彩空間RGB、HSV、YUV
- 了解使用opencv對圖片實現不同色彩空間的轉換
- 了解了色彩空間各個取值對色彩的影響