在這一篇文章中,我們將會學習使用一下OpenCV中色彩空間的轉換函數,我們這里說的色彩空間是說的使用多種顏色(通常指三種以上),來表示顏色的方法,像是我們平時所說的RGB,HSV,YUV,YCRCB,都是色彩空間模型。OpenCV也很方便的封裝了很多的色彩空間函數。下面我們一起來實踐一下(以下所有試驗都根據下圖完成,我截取的Windows自帶的壁紙^_^)
一:RGB
RGB我們很熟悉,一幅圖像是由三個獨立的紅,藍,綠通道構成,每個值代表每個像素的每個分量的度量值,如果值越高也就越亮。
因為人眼也是由三種感光細胞構成,因此RGB我們是最熟悉的,比如在電競的時候,使用RGB燈可以刺激人的感官,提升成績。
上圖也就是RGB的實現方式。
二:灰度
灰度圖像我們的應用也是非常廣泛,包括我們后續的如果做視頻追蹤也都是將彩色視頻逐幀轉換為灰度圖像再去定位,不過這是后話。
彩色轉換為灰度圖像的計算方法如下:
每個像素值只表示灰度信息這一單一信息
RGB[A]準換成灰度:Y=0.299*R+0.587*G+0.114*B
灰度轉換為RGB[A]:R=Y,G=Y,B=Y,A=max(ChannelRange)
在OpenCV中我們可以使用cvtColor函數來實現轉換
結果如下:
三:HSV
HSV顏色空間輸入面向色度的顏色坐標系統的一種。這種類型的顏色模型接近人類顏色感知的仿真模型。
HSV的三個通道表示色度(H給出的顏色光譜構成的一種度量),飽和度(S給出主波長中的純光比例,這表明一種顏色距離相同亮度灰度的程度)和純度(V給出相對于白色光照強度的亮度),對應于直覺上的色彩、明暗和色調。HSV廣泛應用于色彩的比較.
關于HSV的計算可以參考以下的公式:
這里我們用OpenCV實現:
得到的結果如下:
這樣來看,似乎什么信息都沒有,這里要注意一點,因為在代碼中顯示函數使用的是imshow(),這個函數是以RGB來顯示的,因此我們使用HSV肯定是不正確的,如果想顯示正確,必須要將其轉換成RGB空間,這個具體以后再詳細說一下。
四:YCRCB
該空間廣泛用于視頻和圖像壓縮,不能算作純粹的色彩空間,它是RGB顏色空間的一種解碼方式Y通道表示亮度,而Cr和Cb表示紅色差值(在RGB空間中R通道和Y的差值)和藍色差值(在RGB空間中B通道和Y的差值)各自的色度分量。
其變化的計算如下:
在OpenCV中,我們使用:
得到的結果如下:
總體來看,還是可以看得出相對于其他的色彩模型,還是能夠保留一定的色彩,但是因為壓縮的緣故,色彩空間還是差很多。
完整的代碼如下,希望大家可以多多動手,親身嘗試一下。
import cv2 as cvimport numpy as np#色彩空間轉換函數:RGB,HSV,YUV重要def color_space_demo(image): gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) cv.imshow("gray",gray) hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV) cv.imshow("HSV",hsv) yuv = cv.cvtColor(image,cv.COLOR_BGR2YUV) cv.imshow("YUV",yuv) Ycrcb = cv.cvtColor(image,cv.COLOR_BGR2YCrCb) cv.imshow("YCRCB",Ycrcb) #imread函數用來讀取圖片src = cv.imread("D:/1.png")#namedWindow函數用來指定輸出圖片的尺寸和窗口大小,autosize是自動大小cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)#imshow函數用來顯示圖像cv.imshow("input image",src)color_space_demo(src)#等待鍵盤觸發,否則一直在此窗口等待cv.waitKey(0)#結束所有的窗口cv.destroyAllWindows()
責任編輯:xj
原文標題:【CV學習筆記】色彩空間
文章出處:【微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
-
CV
+關注
關注
0文章
53瀏覽量
16883 -
OpenCV
+關注
關注
31文章
635瀏覽量
41445 -
HSV
+關注
關注
0文章
10瀏覽量
2612
原文標題:【CV學習筆記】色彩空間
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論