一、本质上,H的取值范围:0~360   S的取值范围:0~1    V的取值范围:0~255                                                                  但是,当图像为32F型的时候,各通道的取值范围是:                                                                                h:0~360                                                                                      s:0~1                                                                                       v:0~255

   当图像为8位char型时,各通道的取值范围是:                                                                                         h:0~255                                                                                     s:0~1                                                                                        v:0~255

二、代码:

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"

int main(int argc, char* argv[])
{
IplImage* src=cvLoadImage("E:\\大四上\\openCV\\图片\\气球.png");
/* IplImage* hsv_img=cvCreateImage(cvGetSize(src),8,3);
IplImage* h_img=cvCreateImage(cvGetSize(src),8,1);
IplImage* s_img=cvCreateImage(cvGetSize(src),8,1);
IplImage* v_img=cvCreateImage(cvGetSize(src),8,1);

cvCvtColor(src,hsv_img,CV_BGR2HSV); //将src这幅图像的BGR的值转换为HSV,并存储在hsv_img这幅图像中
cvSplit(hsv_img,h_img,s_img,v_img,NULL); //将图像分解为4个通道的值

//输出h的值,h的值在0到180之间
for(int i=0;i<h_img->height;i++)
{
for(int j=0;j<h_img->width;j++)
{
float value=cvGetReal2D(h_img,i,j);
printf("%f ",value);
}
printf("\n");
}*/

//输出h的值,h的值在0到360之间
/* IplImage* src_float=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,3);
IplImage* hsv=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,3);
cvConvertScale(src,src_float,1.0,0); //把char型转换为float型
IplImage* h=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);
IplImage* s=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);
IplImage* v=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);
cvCvtColor(src_float,hsv,CV_BGR2HSV);
cvSplit(hsv,h,s,v,NULL);

for(int i=0;i<h->height;i++)
{
for(int j=0;j<h->width;j++)
{
float value=cvGetReal2D(h,i,j);
printf("%f ",value);
}
printf("\n");
}*/

//输出h的值在0~255之间
IplImage* src_float=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,3);
IplImage* hsv=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,3);
cvConvertScale(src,src_float,1.0,0); //把char型转换为float型
IplImage* h=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);
IplImage* s=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);
IplImage* v=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);
cvCvtColor(src_float,hsv,CV_BGR2HSV);
cvSplit(hsv,h,s,v,NULL);

IplImage* hh=cvCreateImage(cvGetSize(src),8,1);
IplImage* ss=cvCreateImage(cvGetSize(src),8,1);
IplImage* vv=cvCreateImage(cvGetSize(src),8,1);

cvConvertScale(h,hh,(1.0/360.0)*255.0,0);
cvConvertScale(s,ss,255.0,0);
cvConvertScale(v,vv,1.0,0);

for(int y = 0; y < hh->height; y++)
{
for(int x = 0; x < hh->width; x++)
{
float values=cvGetReal2D(hh, y, x);
printf("%f ",values);
}
printf("\n");
}

cvNamedWindow("src");
cvShowImage("src",src);
cvWaitKey(0);

return 0;
}

三、关键函数解析:

1、cvCvtColor(src,hsv_img,CV_BGR2HSV);  颜色空间的转换,将src这幅图像的BGR的值转换为HSV,并存储在hsv_img这幅图像中

2、cvSplit(hsv_img,h_img,s_img,v_img,NULL); 将图像分解为4个通道的值,顺序必须是h、s、v

3、cvConvertScale(src,src_float,1.0,0); 把char型转换为float型,把src这幅图像乘1.0,然后再保存在src_float中

HSV与RGB颜色空间的转换的更多相关文章

  1. 颜色空间模型(HSV\LAB\RGB\CMYK)

    通过Photoshop的拾色器,我们知道表征颜色的模型的不止一种,本文将系统并且详细讨论这四种模型(HSV.LAB.RGB和CMYK)之间的联系以及应用.本文部分章节整合了多位优秀博主的博客(链接见本 ...

  2. RGB颜色空间、HSV颜色空间的理解

    HSV是把H(色相),S(饱和度),V(亮度)当做色值来定位颜色的空间. 1.HSV模型 色相:取值范围是0~360度,用来表示颜色的类别.其中红色是0度,绿色是120度,蓝色是240度.饱和度:取值 ...

  3. RGB颜色空间、色调、饱和度、亮度,HSV颜色空间详解

    本文章会详细的介绍RGB颜色空间与RGB三色中色调.饱和度.亮度之间的关系,最后会介绍HSV颜色空间! RGB颜色空间 概述 RGB颜色空间以R(Red:红).G(Green:绿).B(Blue:蓝) ...

  4. RGB 颜色空间转 HSI 颜色空间的matlab程序实现

    RGB 颜色空间转 HSI 颜色空间的matlab程序实现 2014.10.20之前的内容有误,这里依据wikipedia更新了算法内容. 算法以wiki为准 https://en.wikipedia ...

  5. paper 74:MATLAB图像处理_HSV与RGB颜色空间互转

    HSV空间:分别是H(色调)——S(饱和度)——V(亮度) 与HSI颜色空间类似:分别是H(色调)——S(饱和度)——I(强度) 注意: 强度和亮度差不多是一个概念. 饱和度代表的是渗入白光的数量级, ...

  6. RGB颜色空间与YCbCr颜色空间的互转

    在人脸检测中会用到YCbCr颜色空间,因此就要进行RGB与YCbCr颜色空间的转换.在下面的公式中RGB和YCbCr各分量的值的范围均为0-255. RGB转到YCbCr: float y= (col ...

  7. HSV 和 HLS颜色空间

    颜色空间 颜色空间是特定的颜色组织:它提供了将颜色分类,并以数字图像表示的方法. RGB 是红绿蓝颜色空间.你可以将其视为 3D 空间,在这种情况下是立方体,其中任何颜色都可以用 R.G 和 B 值的 ...

  8. OpenCV学习(1) RGB颜色空间

    1.1彩色空间 颜色是外来的光刺激作用于人的视觉器官而产生的主观感觉,它具有色调.饱和度和亮度三个特性.物体的颜色不仅取决于物体本身,还与光源.周围环境的颜色,以及观察者的视觉系统有关 1.1.1颜色 ...

  9. HSV to RGB

    HSV构成: Hue : the color type (red, blue, or yellow) Ranges from 0 to 360° Saturation : the intensity ...

随机推荐

  1. OC基础--结构体 枚举做类成员属性

    结构体  枚举作类的成员属性: 定义一个学生类 性别 -- 枚举 生日 入学日期  毕业日期  --  结构体 代码示例: 声明文件 Student.h: #import <Foundation ...

  2. 用wget下载整个目录

    wget -c -r -np -P files www.test.com/dir/src -c 断点续传 -r 递归下载 -np 不下载父附录 -nd 不建立目录,若无此选项,将按照网站目录结构创建目 ...

  3. CentOS 6.4下PXE+Kickstart无人值守安装操作系统

    http://www.cnblogs.com/mchina/p/centos-pxe-kickstart-auto-install-os.html

  4. Python 3.x 使用csv模块写入数据

    with open(fileName,'w',newline='') as f: self.fileNames = ['timestamp','elapsedtime'] writer = csv.D ...

  5. Data Binding和INotifyPropertyChanged是如何协调工作的?

    前言 WPF的一大基础就是Data Binding.在基于MVVM架构的基础上,只有通过实现INotifyPropertyChanged接口的ViewModel才能够用于Data Binding. 要 ...

  6. 爱上iOS单元测试系列之爱上她就要先了解她:单元测试入门

    前言 对于单元测试一开始我是拒绝的.单元测试是一个什么东东,因为我喜欢做iOS开发是因为喜欢写APP的啊,一切和这一目标不相干的东西我没兴趣啊,所以从事iOS开发几年都没去深入学习过单元测试(主要是之 ...

  7. android:ToolBar详解

    android:ToolBar详解(手把手教程) 泡在网上的日子 发表于 2014-11-18 12:49 第 124857 次阅读 ToolBar 42 来源 http://blog.mosil.b ...

  8. windows下无法创建django工程的问题

    环境:python2.7  django1.7 安装好django后,将C:\Python27\Lib\site-packages\Django-1.7.7-py2.7.egg\django\bin; ...

  9. IDEA安装配置(SVN)

    IntelliJ IDEA 14 注册码 Win7系统上配置使用Intellij Idea 13的SVN插件 IntelliJ 设置JDK http://blog.sina.com.cn/s/blog ...

  10. CLR线程池

    WaitCallback 表示要在 ThreadPool 线程上执行的回调方法. 创建委托,方法是将回调方法传递给 WaitCallback 构造函数. 您的方法必须具有此处所显示的签名. 如果想使用 ...