【影像處理】使用OpenCV+Python進行影像處理入門教程(三)色彩空間

       這篇隨筆介紹使用OpenCV進行影像處理的第三章 色彩空間。

3  色彩空間

       之前的介紹,大多是基於BGR色彩空間進行的,但針對不同的實際情況,研究人員提出了許多色彩空間,它們都有各自擅長處理的領域。所以,我們需要學習如何對不同色彩空間的影像進行轉換映射。

3.1  色彩空間及類型轉換函數

(一)色彩空間

       常見的色彩空間有GRAY色彩空間、HSV色彩空間、YCrCb色彩空間、CMYK色彩空間、XYZ色彩空間、YUV色彩空間等(顏色模型)。

我們只展示出GRAY灰度模型轉換為RGB顏色模型的方式:

Gray=0.299R+0.587G+0.114B

以後需要用到其他哪種顏色模型之間的轉化,百度即可(手動狗頭)

(二)類型轉換函數

       OpenCV提供了不同色彩空間進行轉化的函數語法,如下:

dst=cv2.cvtColor(src,code [, dstCn])

其中,dst表示輸出影像,src表示輸入影像,code是色彩空間轉換程式碼(枚舉值太多,百度可得),dstCn是影像的通道數(不寫默認為自動獲得)。

 

3.2  類型轉換實例

       本節通過一個實例的程式碼,展示cv2.cvtColor()函數的用法及功能。

實例:將BGR模式轉換為灰度影像,再將灰度影像轉換為RGB模式。

1 #將BGR模式轉換為灰度影像,再將灰度影像轉換為RGB模式
2 import cv2
3 import numpy as np
4 bgr=np.random.randint(0,256,size=[2,4,3],dtype=np.uint8)  #生成2×4×3的BGR影像
5 gray=cv2.cvtColor(bgr,cv2.COLOR_BGR2GRAY)   #BGR影像轉換為灰度影像
6 rgb=cv2.cvtColor(gray,cv2.COLOR_GRAY2RGB)   #灰度影像轉換為RGB影像
7 print('bgr=\n',bgr)
8 print('gray=\n',gray)
9 print('rgb=\n',rgb)

 

3.3  HSV色彩空間應用

       實際中,我們經常使用HSV色彩空間來感知色調、飽和度、亮度。

色調(Hue):取值範圍是[0,360]

飽和度(Saturation):取值範圍是[0,1]

亮度(Value):取值範圍是[0,1]

下面我們通過兩個舉例,來學習HSV色彩空間的程式碼及功能。

舉例一:在OpenCV中測試BGR影像的不同顏色變換到HSV色彩空間後,各個分量的值。

 1 #在OpenCV中測試BGR影像的不同顏色變換到HSV色彩空間後,各個分量的值
 2 import cv2
 3 import numpy as np
 4 #------------測試OpenCV中藍色分量的值-----------
 5 imgBlue=np.zeros([1,1,3],dtype=np.uint8)
 6 imgBlue[0,0,0]=255     #0號通道代表藍色
 7 Blue=imgBlue
 8 BlueHSV=cv2.cvtColor(Blue,cv2.COLOR_BGR2HSV) #BGR模式的藍色變換到HSV色彩空間
 9 print('Blue=\n',Blue)  
10 print('BlueHSV=\n',BlueHSV)
11 #------------測試OpenCV中綠色分量的值-----------
12 imgGreen=np.zeros([1,1,3],dtype=np.uint8)
13 imgGreen[0,0,1]=255    #1號通道代表綠色
14 Green=imgGreen
15 GreenHSV=cv2.cvtColor(Green,cv2.COLOR_BGR2HSV) #BGR模式的綠色變換到HSV色彩空間
16 print('Green=\n',Green)
17 print('GreenHSV=\n',GreenHSV)
18 #------------測試OpenCV中紅色分量的值-----------
19 imgRed=np.zeros([1,1,3],dtype=np.uint8)
20 imgRed[0,0,2]=255      #2號通道代表紅色
21 Red=imgRed
22 RedHSV=cv2.cvtColor(Red,cv2.COLOR_BGR2HSV) #BGR模式的紅色變換到HSV色彩空間
23 print('Red=\n',Red)
24 print('RedHSV=\n',RedHSV)

 

舉例二:調整HSV色彩空間內V通道的值,觀察其處理結果。

 1 #調整HSV色彩空間內V通道的值,觀察其處理結果,以實現藝術效果
 2 import cv2
 3 img=cv2.imread('E:/python_opencv/tupian.jpg')
 4 hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)     #BGR模式轉換為HSV模式
 5 h,s,v=cv2.split(hsv)       #通道拆分
 6 v[:,:]=255                 #V通道置為255
 7 newHSV=cv2.merge([h,s,v])  #通道合併為新的HSV圖片
 8 art=cv2.cvtColor(newHSV,cv2.COLOR_HSV2BGR)  #HSV模式轉換為BGR模式
 9 cv2.imshow('img',img)
10 cv2.imshow('art',art)
11 cv2.waitKey()
12 cv2.destroyAllWindows()

 

3.4  Alpha通道

       在RGB色彩空間的基礎上,還可以加一個A通道,叫做Alpha通道,此時原影像類型轉變為RGBA模式,例如常見的PNG類型影像就是RGBA色彩空間的。Alpha通道的取值範圍是[0,1]或[0,255],表示從透明到不透明。

下面是一個舉例,展示Alpha通道的程式碼和分析:

 1 #編寫程式,分析alpha通道的值
 2 import cv2
 3 import numpy as np
 4 img=np.random.randint(0,256,size=[2,3,3],dtype=np.uint8)  #生成2×3×3的BGR影像
 5 bgra=cv2.cvtColor(img,cv2.COLOR_BGR2BGRA)
 6 print('img=\n',img)
 7 print('bgra=\n',bgra)
 8 b,g,r,a=cv2.split(bgra)
 9 print('a=\n',a)
10 a[:,:]=125
11 bgra=cv2.merge([b,g,r,a])
12 print('bgra=\n',bgra)

 

這次內容就分享到這裡了,下次繼續更新第4章影像的幾何變換,希望與各位老師和小夥伴們交流學習~