HSV与RGB颜色空间的转换
一、本质上,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颜色空间的转换的更多相关文章
- 颜色空间模型(HSV\LAB\RGB\CMYK)
通过Photoshop的拾色器,我们知道表征颜色的模型的不止一种,本文将系统并且详细讨论这四种模型(HSV.LAB.RGB和CMYK)之间的联系以及应用.本文部分章节整合了多位优秀博主的博客(链接见本 ...
- RGB颜色空间、HSV颜色空间的理解
HSV是把H(色相),S(饱和度),V(亮度)当做色值来定位颜色的空间. 1.HSV模型 色相:取值范围是0~360度,用来表示颜色的类别.其中红色是0度,绿色是120度,蓝色是240度.饱和度:取值 ...
- RGB颜色空间、色调、饱和度、亮度,HSV颜色空间详解
本文章会详细的介绍RGB颜色空间与RGB三色中色调.饱和度.亮度之间的关系,最后会介绍HSV颜色空间! RGB颜色空间 概述 RGB颜色空间以R(Red:红).G(Green:绿).B(Blue:蓝) ...
- RGB 颜色空间转 HSI 颜色空间的matlab程序实现
RGB 颜色空间转 HSI 颜色空间的matlab程序实现 2014.10.20之前的内容有误,这里依据wikipedia更新了算法内容. 算法以wiki为准 https://en.wikipedia ...
- paper 74:MATLAB图像处理_HSV与RGB颜色空间互转
HSV空间:分别是H(色调)——S(饱和度)——V(亮度) 与HSI颜色空间类似:分别是H(色调)——S(饱和度)——I(强度) 注意: 强度和亮度差不多是一个概念. 饱和度代表的是渗入白光的数量级, ...
- RGB颜色空间与YCbCr颜色空间的互转
在人脸检测中会用到YCbCr颜色空间,因此就要进行RGB与YCbCr颜色空间的转换.在下面的公式中RGB和YCbCr各分量的值的范围均为0-255. RGB转到YCbCr: float y= (col ...
- HSV 和 HLS颜色空间
颜色空间 颜色空间是特定的颜色组织:它提供了将颜色分类,并以数字图像表示的方法. RGB 是红绿蓝颜色空间.你可以将其视为 3D 空间,在这种情况下是立方体,其中任何颜色都可以用 R.G 和 B 值的 ...
- OpenCV学习(1) RGB颜色空间
1.1彩色空间 颜色是外来的光刺激作用于人的视觉器官而产生的主观感觉,它具有色调.饱和度和亮度三个特性.物体的颜色不仅取决于物体本身,还与光源.周围环境的颜色,以及观察者的视觉系统有关 1.1.1颜色 ...
- HSV to RGB
HSV构成: Hue : the color type (red, blue, or yellow) Ranges from 0 to 360° Saturation : the intensity ...
随机推荐
- OC基础--结构体 枚举做类成员属性
结构体 枚举作类的成员属性: 定义一个学生类 性别 -- 枚举 生日 入学日期 毕业日期 -- 结构体 代码示例: 声明文件 Student.h: #import <Foundation ...
- 用wget下载整个目录
wget -c -r -np -P files www.test.com/dir/src -c 断点续传 -r 递归下载 -np 不下载父附录 -nd 不建立目录,若无此选项,将按照网站目录结构创建目 ...
- CentOS 6.4下PXE+Kickstart无人值守安装操作系统
http://www.cnblogs.com/mchina/p/centos-pxe-kickstart-auto-install-os.html
- Python 3.x 使用csv模块写入数据
with open(fileName,'w',newline='') as f: self.fileNames = ['timestamp','elapsedtime'] writer = csv.D ...
- Data Binding和INotifyPropertyChanged是如何协调工作的?
前言 WPF的一大基础就是Data Binding.在基于MVVM架构的基础上,只有通过实现INotifyPropertyChanged接口的ViewModel才能够用于Data Binding. 要 ...
- 爱上iOS单元测试系列之爱上她就要先了解她:单元测试入门
前言 对于单元测试一开始我是拒绝的.单元测试是一个什么东东,因为我喜欢做iOS开发是因为喜欢写APP的啊,一切和这一目标不相干的东西我没兴趣啊,所以从事iOS开发几年都没去深入学习过单元测试(主要是之 ...
- android:ToolBar详解
android:ToolBar详解(手把手教程) 泡在网上的日子 发表于 2014-11-18 12:49 第 124857 次阅读 ToolBar 42 来源 http://blog.mosil.b ...
- windows下无法创建django工程的问题
环境:python2.7 django1.7 安装好django后,将C:\Python27\Lib\site-packages\Django-1.7.7-py2.7.egg\django\bin; ...
- IDEA安装配置(SVN)
IntelliJ IDEA 14 注册码 Win7系统上配置使用Intellij Idea 13的SVN插件 IntelliJ 设置JDK http://blog.sina.com.cn/s/blog ...
- CLR线程池
WaitCallback 表示要在 ThreadPool 线程上执行的回调方法. 创建委托,方法是将回调方法传递给 WaitCallback 构造函数. 您的方法必须具有此处所显示的签名. 如果想使用 ...