从 RGB 到 HSL 或 HSV 的转换
设 (r, g, b) 分别是一个颜色的红、绿和蓝坐标,它们的值是在 0 到 1 之间的实数。设 max 等价于 r, g 和 b 中的最大者。设 min 等于这些值中的最小者。要找到在 HSL 空间中的 (h, s, l) 值,这里的 h ∈ [0, 360)度是角度的色相角,而 s, l ∈ [0,1] 是饱和度和亮度,计算为:

(1)Matlab RGB转换为HSV
I = imread('Lena.jpg'); HSV = rgb2hsv(I); H = HSV(:, :, 1); S = HSV(:, :, 2); V = HSV(:, :, 3); figure; subplot(2, 3, 1); imshow(I); //subplot(2, 3, 2); imshow(HSV); subplot(2, 3, 4); imshow(H); subplot(2, 3, 5); imshow(S); subplot(2, 3, 6); imshow(V);
(2)Opencv中RGB转换为HSV
// BRGtoHSVShow.cpp : 定义控制台应用程序的入口点。 //
//#include "stdafx.h" #include "cv.h" #include "cxcore.h" #include "highgui.h" #include "cvaux.h"
int main( ) { IplImage* src = NULL; IplImage* floatsrc = NULL; IplImage* floathsv = NULL; IplImage* floatimgH = NULL; IplImage* floatimgS = NULL; IplImage* floatimgV = NULL;
cvNamedWindow( "src", 1 ); cvNamedWindow( "H通道", 1 ); cvNamedWindow( "S通道", 1 ); cvNamedWindow( "V通道", 1 );
src = cvLoadImage( "lena.jpg", -1); cvShowImage( "src", src ); CvSize size = cvGetSize( src );
//先将图像转换成float型的 floatsrc = cvCreateImage( size, IPL_DEPTH_32F, 3 ); floathsv = cvCreateImage( size, IPL_DEPTH_32F, 3 ); floatimgH = cvCreateImage( size, IPL_DEPTH_32F, 1 ); floatimgS = cvCreateImage( size, IPL_DEPTH_32F, 1 ); floatimgV = cvCreateImage( size, IPL_DEPTH_32F, 1 );
//将src从8位转换到32位的float型 cvConvertScale( src, floatsrc, 1.0/255.0, 0 );//归一化之后方能够显示 //cvConvertScale( src, floatsrc, 1, 0 ); //cvShowImage("floatsrc",floatsrc); //cvWaitKey(-1);
//将float型图像 从BGR转换到HSV 如果需要转换到其他的颜色空间 那么改变CV_BGR2HSV即可 //cvCvtColor要求两个参数的类型必须完全相同,所以要转为float型 cvCvtColor( floatsrc, floathsv, CV_BGR2HSV );
//将三通道图像 分解成3个单通道图像,H对应的通道时0,S、V对应的通道时1和2 //cvCvtPixToPlane(picHSV, h_plane, s_plane, v_plane, 0); cvSplit( floathsv, floatimgH, floatimgS, floatimgV, NULL);
cvShowImage( "src", src ); cvShowImage( "H通道", floatimgH ); cvShowImage( "S通道", floatimgS ); cvShowImage( "V通道", floatimgV ); //CV_BGR2HSV
cvWaitKey( 0 );
cvReleaseImage( &src ); cvReleaseImage( &floathsv ); cvReleaseImage( &floatimgH ); cvReleaseImage( &floatimgS ); cvReleaseImage( &floatimgV );
return 0; }
参考资料:
http://blog.163.com/my_it_dream_pwj/blog/static/178414305201131310153036/
http://www./thread-95980-1-1.html
http://blog.sina.com.cn/s/blog_658cfb1d01014fv5.html
http://zhidao.baidu.com/question/259749959.html
http://www./forum/viewtopic.php?t=4032 http://zh./wiki/HSL%E5%92%8CHSV%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4
|