RGB和HSV顏色轉換

2021-06-22 08:22:41 字數 3121 閱讀 3749

分類: 影象處理

2008-07-21 21:50

2979人閱讀收藏 

舉報integer

演算法工具

c360

h引數表示色彩資訊,即所處的光譜顏色的位置。該引數用一角度量來表示,紅、綠、藍分別相隔120度。互補色分別相差180度。 

純度s為一比例值,範圍從0到1,它表示成所選顏色的純度和該顏色最大的純度之間的比率。s=0時,只有灰度。 

v表示色彩的明亮程度,範圍從0到1。有一點要注意:它和光強度之間並沒有直接的聯絡。

rgb轉化到hsv的演算法: 

1: max=max(r,g,b)2: min=min(r,g,b)3:ifr = max,h =

(g-b)/

(max-min)

4:ifg = max,h =2+

(b-r)/

(max-min)

5:ifb = max,h =4+

(r-g)/

(max-min)

6: 7: h = h *

608:

ifh <

0,h = h +

3609:

10: v=max(r,g,b)

11: s=

(max-min)/max

hsv轉化到rgb的演算法 

1: 

ifs =

02: r=g=b=v

3:else

4: h /=60

;

5: i = integer(h)

6: 7: f = h - i

8: a = v *

(1

- s)

9: b = v *

(1

- s * f)

10: c = v *

(1

- s *

(1

- f))

11:

12:

switch(i)

13:

case0

: r = v;g = c;b = a;

14:

case1

: r = b;g = v;b = a;

15:

case2

: r = a;g = v;b = c;

16:

case3

: r = a;g = b;b = v;

17:

case4

: r = c;g = a;b = v;

18:

case5

: r = v;g = a;b = b;

hsv對使用者來說是一種直觀的顏色模型。我們可以從一種純色彩開始,即指定色彩角h,並讓v=s=1,然後我們可以通過向其中加入黑色和白色來得到我們需要的顏色。增加黑色可以減小v而s不變,同樣增加白色可以減小s而v不變。例如,要得到深藍色,v=0.4 s=1 h=240度。要得到淡藍色,v=1 s=0.4 h=240度。 

一般說來,人眼最大能區分128種不同的色彩,130種色飽和度,23種明暗度。如果我們用16bit表示hsv的話,可以用7位存放h,4位存放s,5位存放v,即745或者655就可以滿足我們的需要了。 

由於hsv是一種比較直觀的顏色模型,所以在許多影象編輯工具中應用比較廣泛,如photoshop(在photoshop中叫hsb)等等,但這也決定了它不適合使用在光照模型中,許多光線混合運算、光強運算等都無法直接使用hsv來實現。 

順便提一下,另外一種直觀顏色模型是hsl模型,該模型中前兩個引數和hsv一樣,而l表示亮度。它的三維表示為一雙稜錐。

RGB和HSV顏色轉換

h引數表示色彩資訊,即所處的光譜顏色的位置。該引數用一角度量來表示,紅 綠 藍分別相隔120度。互補色分別相差180度。純度s為一比例值,範圍從0到1,它表示成所選顏色的純度和該顏色最大的純度之間的比率。s 0時,只有灰度。v表示色彩的明亮程度,範圍從0到1。有一點要注意 它和光強度之間並沒有直接的...

RGB和HSV顏色空間

rgb顏色空間 rgb red,green,blue 顏色空間最常用的用途就是顯示器系統,彩色陰極射線管,彩色光柵圖形的顯示器都使用r g b數值來驅動r g b電子槍發射電子,並分別激發螢光屏上的r g b三種顏色的螢光粉發出不同亮度的光線,並通過相加混合產生各種顏色 掃瞄器也是通過吸收原稿經反射...

RGB到HSV顏色空間的轉換

opencv預設讀取影象是rgb通道,現需要轉化到hsv hue,saturation,value 顏色空間,opencv提供cvtcolor c void cvtcolor inputarray src,outputarray dst,int code,int dstcn 0 函式對顏色空間進行轉...