【圖像處理】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章圖像的幾何變換,希望與各位老師和小伙伴們交流學習~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM