【影像處理】使用OpenCV+Python進行影像處理入門教程(三)色彩空間
- 2021 年 3 月 4 日
- 筆記
- OpenCV, 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章影像的幾何變換,希望與各位老師和小夥伴們交流學習~