OpenCV中RGB转HSV和HSV转RGB问题

通常理论上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图像才是正确的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值