色调H:用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°。一旦颜色从一种颜色进入另一种颜色,人眼将立即发现它。色调是人眼对光主波长的认知;
饱和度S:表示颜色纯净的程度,取值范围为0.0~1.0
亮度V:表示颜色的明暗程度,对于单色光,亮度表示了光线的强弱,对于物体,明度表示物体的反射或透射光线的能力,取值范围为0.0(黑色)~1.0(白色)。
简单程序来具体实现:
#include<iostream>
#include "cv.h"
#include "highgui.h"
#include <ctype.h>
using namespace std;
void main()
{
IplImage *image,*hsv,*hue,*saturation,*value;//图像空间
image=cvLoadImage("img2.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);
//释放空间
cvDestroyWindow("image");
cvDestroyWindow("hsv");
cvDestroyWindow("hue");
cvDestroyWindow("saturation");
cvDestroyWindow("value");
return;
}