HSV顏色模型

HSV(Hue, Saturation, Value)是根據顏色的直觀特性由A. R. Smith在1978年創建的一種顏色空間, 也稱六角錐體模型(Hexcone Model)。HSV顏色模型是指H、S、V三維顏色空間中的一個可見光子集,它包含某個顏色域的所有顏色。

基本介紹

  • 中文名:HSV顏色模型
  • 外文名:HSV color model
  • 類型:計算機科學
  • 學科:跨學科
  • 性質:模型
  • 概念:一個可見光子集
介紹,模型,代碼,RGB轉化到HSV的算法,HSV轉化到RGB的算法,分離通道的算法,

介紹

HSV(Hue, Saturation, Value)是根據顏色的直觀特性由A. R. Smith在1978年創建的一種顏色空間, 也稱六角錐體模型(Hexcone Model)。HSV色系對用戶來說是一種直觀的顏色模型,對於顏色,人們直觀的會問”什麼顏色?深淺如何?明暗如何?“,而HSV色系則直觀的表示了這些信息。
每一種顏色都是由色相(Hue,簡H),飽和度(Saturation,簡S)和色明度(Value,簡V)所表示的。這個模型中顏色的參數分別是:色調(H),飽和度(S),亮度(V)。
色調H參數表示色彩信息,即所處的光譜顏色的位置。該參數用一角度量來表示,取值範圍為0°~360°。若從紅色開始按逆時針方向計算,紅色為0°,綠色為120°,藍色為240°。它們的補色是:黃色為60°,青色為180°,品紅為300°;
飽和度S:取值範圍為0.0~1.0;
亮度V:取值範圍為0.0(黑色)~1.0(白色)。

模型

HSV模型對應於圓柱坐標系中的一個圓錐形子集,圓錐的頂面對應於V=1。它包含RGB模型中的R=1,G=1,B=1 三個面,所代表的顏色較亮。色彩H由繞V軸的旋轉角給定。紅色對應於角度0° ,綠色對應於角度120°,藍色對應於角度240°。在HSV顏色模型中,每一種顏色和它的補色相差180°。飽和度S取值從0到1,所以圓錐頂面的半徑為1。
HSV顏色模型所代表的顏色域是CIE色度圖的一個子集,這個模型中飽和度為百分之百的顏色,其純度一般小於百分之百。在圓錐的頂點(即原點)處,V=0,H和S無定義,代表黑色。圓錐的頂面中心處S=0,V=1,H無定義,代表白色。從該點到原點代表亮度漸暗的灰色,即具有不同 灰度的灰色。對於這些點,S=0,H的值無定義。
可以說,HSV模型中的V軸對應於RGB顏色空間中的主對角線。 在圓錐頂面的圓周上的顏色,V=1,S=1,這種顏色是純色。HSV模型對應於畫家配色的方法。畫家用改變色濃和 色深的方法從某種純色獲得不同色調的顏色,在一種純色中加入白色以改變色濃,加入黑色以改變色深,同時加入不同比例的白色,黑色即可獲得各種不同的色調。
HSV顏色模型

代碼

RGB轉化到HSV的算法

max=max(R,G,B):min=min(R,G,B)V=max(R,G,B)S=(max-min)/max:if R = max,H =(G-B)/(max-min)* 60if G = max,H = 120+(B-R)/(max-min)* 60if B = max,H = 240 +(R-G)/(max-min)* 60if H < 0,H = H+ 360

HSV轉化到RGB的算法

 if s = 0R=G=B=VelseH /= 60;i = INTEGER(H)f = H - ia = 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 5: R = v; G = a; B = b;

分離通道的算法

#include<iostream>#include "cv.h"#include "highgui.h"#include <ctype.h>using namespace std;void main(){IplImage *image,*hsv,*hue,*saturation,*value;//圖像空間image=cvLoadImage("C:\\Users\\lufee\\Pictures\\cat.jpg");//打開圖像源圖像hsv=cvCreateImage(cvGetSize(image),8,3);//給hsv色系的圖像申請空間hue=cvCreateImage(cvGetSize(image),8,1); //色調saturation=cvCreateImage(cvGetSize(image),8,1);//飽和度value=cvCreateImage(cvGetSize(image),8,1);//亮度cvNamedWindow("image",CV_WINDOW_AUTOSIZE);//用於顯示圖像的視窗cvNamedWindow("hsv",CV_WINDOW_AUTOSIZE);cvNamedWindow("hue",CV_WINDOW_AUTOSIZE);cvNamedWindow("saturation",CV_WINDOW_AUTOSIZE);cvNamedWindow("value",CV_WINDOW_AUTOSIZE);cvCvtColor(image,hsv,CV_BGR2HSV);//將RGB色系轉為HSV色系cvShowImage("image",image);cvShowImage("hsv",hsv);cvSplit(hsv, hue, 0, 0, 0 );//分離三個通道cvSplit(hsv, 0, saturation, 0, 0 );cvSplit(hsv, 0, 0, value, 0 );cvShowImage("hue",hue);cvShowImage("saturation",saturation);cvShowImage("value",value);cvWaitKey(0);c
#include<iostream>#include "cv.h"#include "highgui.h"#include <ctype.h>using namespace std;void main(){IplImage *image,*hsv,*hue,*saturation,*value;//圖像空間image=cvLoadImage("C:\\Users\\lufee\\Pictures\\cat.jpg");//打開圖像源圖像hsv=cvCreateImage(cvGetSize(image),8,3);//給hsv色系的圖像申請空間hue=cvCreateImage(cvGetSize(image),8,1); //色調saturation=cvCreateImage(cvGetSize(image),8,1);//飽和度value=cvCreateImage(cvGetSize(image),8,1);//亮度cvNamedWindow("image",CV_WINDOW_AUTOSIZE);//用於顯示圖像的視窗cvNamedWindow("hsv",CV_WINDOW_AUTOSIZE);cvNamedWindow("hue",CV_WINDOW_AUTOSIZE);cvNamedWindow("saturation",CV_WINDOW_AUTOSIZE);cvNamedWindow("value",CV_WINDOW_AUTOSIZE);cvCvtColor(image,hsv,CV_BGR2HSV);//將RGB色系轉為HSV色系cvShowImage("image",image);cvShowImage("hsv",hsv);cvSplit(hsv, hue, 0, 0, 0 );//分離三個通道cvSplit(hsv, 0, saturation, 0, 0 );cvSplit(hsv, 0, 0, value, 0 );cvShowImage("hue",hue);cvShowImage("saturation",saturation);cvShowImage("value",value);cvWaitKey(0);c

相關詞條

熱門詞條

聯絡我們