一、本质上,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. 用JS修改checkbox的选中状态

    代码如下: <SCRIPT LANGUAGE="JavaScript"> <!-- function change() { var c=document.myfo ...

  2. Bootstrap<基础十七>导航栏

    导航栏是一个很好的功能,是 Bootstrap 网站的一个突出特点.导航栏在您的应用或网站中作为导航页头的响应式基础组件.导航栏在移动设备的视图中是折叠的,随着可用视口宽度的增加,导航栏也会水平展开. ...

  3. sql修改字段名称

    EXEC sp_rename 'RPersonalityColor.[PTF_UPDATE_DT]','PTC_UPDATE_DT','COLUMN'; RPersonalityColor.[PTF_ ...

  4. 使用keytool生产jks证书

    使用JDK中的keytool生成服务器证书 1.创建服务器KeyStorekeytool -genkey -alias server_jks_cennavi -keyalg RSA  -keystor ...

  5. 前端开发week1

    1.前端开发前期相关工具 photoshop:主要学习运用与前端相关工具,了解UI与前端的关联.    axure:原型设计,通过设计原型了解网页基本结构,结合ps对UI有更好的理解.    webs ...

  6. Android Design Support Library使用详解

    Android Design Support Library使用详解 Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的And ...

  7. 小型资源管理器,IO操作,读取和写入文件和目录的常用操作

    解决方案: 小总结: 用IO流,的file,DirectoryInfo的方法绑定Treeview控件上和删除,读取, 可以熟练掌握一下IO流 主页面: private void Form1_Load( ...

  8. css display:inline-block 出现空格解决方案

    一: 给父元素添加 display: table;(只加这一句在谷歌, safari里可以) 子元素加: display: table-cell(火狐) 两句都加完美解决 二: .nav ul{fon ...

  9. Unity3D中可中途释放的单例

    Unity3D中可中途释放的单例 使用静态类,静态变量的坏处是从程序加载后就一直占用内存,想要释放比较麻烦,可是之前使用的单例,没有提供释放的方法,那是不是也同静态的一样直到程序结束菜释放?那单例的好 ...

  10. 13个JavaScript图表(JS图表)图形绘制插件【转】

    现在网络上又有越来越多的免费的(JS 图表)JavaScript图表图形绘制插件.我之前给一家网站做过复杂的图形,我们用的是 highchart.在那段时间,没有很多可供选择的插件.但现在不同了,很容 ...