庞峰Opencv学习(四)--颜色空间转换

来源:互联网 发布:数据网络开关 编辑:程序博客网 时间:2024/05/02 06:43

  今天学习了一下,BGR和HSV颜色空间以及二者间的转换,感觉还是写了程序印象才更加深刻,记得也更牢吧。

  1. BGR空间相信大家都已经比较了解了,还是说一下HSV颜色空间吧。

  H代表Hue即色度:这里的H以一个360°的转盘呈现,0°代表红色,直径上的端点互为补色,即合成为白色。

  S代表Saturation即饱和度:通俗的来讲就是颜色纯不纯,数值越大表示颜色越纯。

  V代表Value即纯度:可以理解为亮度Brightness,数值越大颜色显得越亮。

  2. 函数进行一下介绍

    ConverScale:使用线性变换转换数组

    void cvConvertScale( const CvArr* src, CvArr* dst, double scale=1, double shift=0 );

    在颜色空间的转换中,由于CvShowImage()函数只对8位无符号型颜色深度图像进行显示,所以需要将HSV空间的深度进行转换,而从HSV向BGR空间转换时也有同样的问题,如下面代码所示

 3. 在8位无符号颜色深度的HSV空间中,H通道为0-180 S通道为0-1 V通道为0-255 在转换时需要特别注意,图2为从HSV空间通过单通道融合转换到BGR空间的图像,图3是在HSV空间通过CvCvtColor()函数复原的BGR图像。

#include "cv.h"#include "cxcore.h"#include "highgui.h"#include "stdio.h"void main(){//进行RGB到HSV空间的转换IplImage* src = cvLoadImage("1.jpg");cvNamedWindow("src");cvShowImage("src",src);cvWaitKey(0);IplImage* hsv1 = cvCreateImage(cvGetSize(src),8,3);IplImage* h1 = cvCreateImage(cvGetSize(src),8,1);IplImage* s1 = cvCreateImage(cvGetSize(src),8,1);IplImage* v1 = cvCreateImage(cvGetSize(src),8,1);//进行RGB2HSVcvCvtColor(src,hsv1,CV_BGR2HSV);cvSplit(hsv1,h1,s1,v1,NULL);/*for(int y=0;y<h1->height;y++){for (int x=0; x<h1->width;x++){float hout = cvGetReal2D(h1,y,x);//由于8位最多保存255,所以这里只保存0-180printf("%f ",hout);}}*//************************************************************************//* 得出H(色度)通道的值都是0到180的浮点值,而s(饱和度)通道为0到1,V(亮度)通道为0-255                                                                  *//************************************************************************///*****将H通道转换为0-360高精度输出*********IplImage* src_float = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,3);IplImage* hsv2 = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,3);IplImage* h2 = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);IplImage* s2 = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);IplImage* v2 = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);//进行8位无符号char向32位float转换cvConvertScale(src,src_float,1.0 ,0);cvCvtColor(src_float,hsv2,CV_RGB2HSV);cvSplit(hsv2,h2,s2,v2,NULL);/*for(int y=0;y<h2->height;y++){for (int x=0; x<h2->width;x++){float hout = cvGetReal2D(h2,y,x);//0-(<360)printf("%f ",hout);}}*///进行HSV向RGB的转换IplImage* bgrMerge = cvCreateImage(cvGetSize(src),8,3);IplImage *b1 = cvCreateImage(cvGetSize(src),8,1);IplImage *g1 = cvCreateImage(cvGetSize(src),8,1);IplImage *r1 = cvCreateImage(cvGetSize(src),8,1);cvConvertScale(h2,b1,(1.0/360)*255,0);//0-(<360)->0-255cvConvertScale(s2,g1,255,0);cvConvertScale(v2,r1,1.0,0);cvMerge(b1,g1,r1,NULL,bgrMerge);cvNamedWindow("merge");cvShowImage("merge",bgrMerge);cvWaitKey(0);IplImage* bgrMerge2 = cvCreateImage(cvGetSize(src),8,3);cvCvtColor(hsv1,bgrMerge2,CV_HSV2BGR);cvNamedWindow("merge2");cvShowImage("merge2",bgrMerge2);cvWaitKey(0);}


 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕32周胎位不正怎么办 7个月胎位不正怎么办 胎心监护老不过怎么办 8个月了胎位不正怎么办 怀孕八个月了胎位不正怎么办 怀孕八个月胎位不正怎么办 欠债的人跑了怎么办 赌博输了100万怎么办 我赌博输了4万怎么办 办80张信用卡怎么办的 19岁负债十几万怎么办 欠了十几万该怎么办 网贷负债十几万怎么办 赌博欠了十几万怎么办 欠了网贷跑了会怎么办 欠银行钱还不起怎么办 欠小额贷款公司的钱还不上怎么办 负债30万没工作怎么办 华为p9耗电太快怎么办 酷派手机反应慢怎么办 网上买手机被骗了怎么办 买手机贵了怎么办12315 在手机店被骗了怎么办 在转转上被骗了怎么办 微信被骗了800怎么办 苹果6被偷走该怎么办 苹果7被偷走该怎么办 月经量突然少了怎么办 我月经老是不来怎么办 月经不来3个月怎么办 月经推迟3个月怎么办 乙肝五项25阳怎么办 乙肝五项25阳性怎么办 流浓鼻涕怎么办速效办法 鼻涕又浓又黄绿怎么办 玉露已经徒长了怎么办 多肉长出了多头怎么办 多肉已经徒长了怎么办 脖子抻筋了 很疼怎么办 声带肥大造成说话声音沙哑怎么办 轻微的骨性龅牙怎么办