公式: h参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,红、绿、蓝分别相隔120度。互补色分别相差180度。 纯度s为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率。s=0时,只有灰度。 v表示色彩的明亮程度,范围从0到1。有一点要注意:它和光强度之间并没有直接的联系。 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; ase 2: r = a; g = v; b = c; case 3: r = a; g = b; b = v; case 4: r = c; g = a; b = v; case 5: 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中叫h**)等等,但这也决定了它不适合使用在光照模型中,许多光线混合运算、光强运算等都无法直接使用hsv来实现。 20210311