您的位置:首页 > 运维架构

OpenCV中RGB转HSV和HSV转RGB问题

2014-03-04 22:07 309 查看
通常理论上HSV模型的各分量的取值范围为:H分量0到360,S分量0到255,V分量0到255。但是在OpenCV中需要注意一些问题。

OpenCV中进行RGB和HSV颜色模型转换的函数是cvCvtColor(src,dst,xxx),下面给出OpenCV中的各种注意点。

(1)IplImage* src = cvLoadImage("lena.jpg",1);

IplImage* imghsv = cvCreateImage(cvGetSize(src),8,3);

cvCvtColor(src ,imghsv,CV_BGR2HSV);//BGR转换成HSV模型

默认以8位无符号形式载入,那么转换后的HSV各分量范围是H为0到180,S为0到1,V为0到255。(因为8位无符号型变量无法放下360的数据,这里opencv直接除以2)

(2)IplImage* src = cvLoadImage("lena.jpg",1);

IplImage* src_float = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,3);

IplImage* imghsv = cvCreateImage(cvGetSize(src),8,3);

cvConvertScale(src,src_float,1.0,0);//将src图像从8位转换成32位float型变量

cvCvtColor(src_float,imghsv,CV_BGR2HSV);//BGR转换成HSV模型

都先转换成32为float型图像,然后在进行HSV模型转换,这样转换后的各分量范围是H为0到360,S为0到1,V为0到255。

(3)当进行HSV各分量显示的时候,可以通过cvSplit函数将各通道分离,然后通过cvConvertScale函数将各分量的范围都转化成0到255,在通过8位无符号型图像显示即可。因为cvShowImage函数只能显示8位无符号型图像,不能显示32位Float型图像。

(4)当进行HSV模型还原到RGB模型时,这里使用cvCvtColor函数就要注意,输入的HSV模型的图像必须将HSV各分量还原到默认的范围。这样cvCvtColor转换后的RGB图像才是正确的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: