目前經常使用的顏色模型可分爲兩類,一類面向諸如彩色顯示器或打印機之類的硬件設備,另外一類面向以彩色處理爲目的的應用,如動畫中的彩色圖形。面向硬件設備的最經常使用彩色模型是 RGB 模型,而面向彩色處理的最經常使用的模型是 HSV 模型,其中 H表示色調(Hue),S 表示飽和度(Saturation),V 表示亮度(Value)。 php
RGB顏色模型 算法
RGB 顏色模型由紅、綠、藍三種基色組成,它大多用於 CRT 顯示器和顏色光柵圖形。這個模型基於笛卡兒座標系統,3 個軸分別爲 R,G,B。經過紅、綠、藍三種基色能夠混合獲得大多數的顏色。以下圖所示: 動畫
座標原點表明(0,0,0)黑色,而座標點(1,1,1)表明白色。座標軸上的頂點表明三個基色,而餘下的頂點則表明第一個基色的補色。爲方便表示,將立方體歸一化爲單位立方體,這樣全部的 R,G,B 的值都在[0,1]中。根據這個模型,每幅彩色圖像包括3個獨立的基色平面,或者說可分解到 3 個平面上。反過來若是一幅圖像可被表示爲 3個平面,使用這個模型比較方便。 spa
HSV顏色模型 code
在 HSV 模型中,亮度(V)是光做用於人眼時所引發的明亮程度的感受,它與被觀察物體的發光強度有關。色調(H)是當人眼看到一種或多種波長的光時所產生的彩色感受,它反映顏色的種類,是決定顏色的基本特性,如紅色、棕色就是指色調。飽和度(S)指的是顏色的純度,即摻入白光的程度,或者說是指顏色的深淺程度,對於同一色調的彩色光,飽和度越深顏色越鮮明或說越純。一般把色調和飽和度通稱爲色度。 視頻
HSV 模型的三維表示從 RGB 立方體演變而來。若是設想沿對角線從白色頂點向黑色頂點觀察,能夠看到如圖 2.2 所示的立方體六邊形外形。六邊形的邊界表示不一樣的色彩,用於 HSV 六棱錐的頂部。在六棱錐中,飽和度沿水平軸測量,而亮度值通 blog
過六棱錐中心的垂直軸測量。 接口
色調(H)用與水平軸之間的角度來表示,範圍從 0 度到 360 度。六邊形的頂點以60 度爲間隔。黃色位於 60 度處,綠色在 120 度處而青色在 150 度處,與紅色相對。相補的顏色互成 180 度。 ip
飽和度(S)從 0 到 1 變化。在此模型中它表示成所選色彩的純度與該色彩的最大純度(S=l)的比率。當 S=0.5 時所選色彩的純度爲四分之一。當 S=0 時,只有灰度。 get
亮度值(V)從六邊形頂點的 0 變化到頂部的 1,頂點表示黑色。在六邊形頂部的顏色強度最大。當 V=1,S=l 時,有純色彩。白色是 V=l 且 S=0 的點。
HSV 對多數用戶來講是一個較直觀的模型。從指定一種純彩色開始,即指定色調H 且讓 V=S=1,能夠經過將白色或黑色加入到純色彩中來描述所要的顏色。增長黑色,減少 V 而 S 保持不變。要獲得深藍色,V=0.4,S=1 且 H=240 度。一樣,將白色加進所選的色彩中時,參數 S 減少而 V 保持不變。淺藍色能夠用 S=0.3,V=1 且 H=240 度來設定。添加一些黑色和白色,則同時減少 V 和 S。一般要有一個該模型的接口給出顏色板中 HSV 參數選擇。結合明暗、色澤和色調等術語的顏色概念反映在 HSV 六邊形的剖切面中。
HSV 顏色空間清晰地將顏色分爲色度和亮度,而陰影不會改變背景的色度,故經常使用此顏色空間來進行陰影檢測。
RGB 和 HSV 模型之間的轉換
因爲 RGB 和 HSV 相互轉化的算法較爲繁雜,因此本文給出用僞代碼實現的方法。
RGB 轉化到 HSV 的算法以下:
max=max(R,G,B) min=min(R,G,B) if R=max,H=(G-B)/(max-min) if G=max,H=2+(B-R)/ (max-min) if B=max,H=4+(R-G)/ (max-min) H=H*60 If H<0,H=H+360 V=max(R,G,B) S=(max-min)/max
HSV 轉化到 RGB 的算法以下:
if S=0 R=G=B=V else{ H/=60 i=INTEGER(H) f=H-i a=V*(1-S) b=V*(1-S*f) c=V*(1-S*(1-f)) switch(i) case 0:R=V;G=c;B=a; case 1:R=b;G=V;B=a; case 2:R=a;G=V;B=c; case 3:R=a;G=b;B=V; case 4:R=c;G=a;B=V; case 0:R=V;G=a;B=b; }
Enjoy~
原創文章:轉載出處: 視頻監控之顏色模型——RGB、HSV模型