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 ...
随机推荐
- android app 提示信息
Toast.makeText(this,"You cannot have less than 1 coffee",Toast.LENGTH_SHORT).show();TextVi ...
- java 字符串转成 json 数组并且遍历
当需要把一串字符串转成一个json 数组 ,并遍历其中的内容时. 首先要导入 net.sf.json.JSONArray和net.sf.json.JSONObject 两个jar 包 String s ...
- 【重要!】告K2老客户书
K2近期升级优化了售后支持系统,以便能更好的为亲爱的老客户们答疑解惑,比如:“老妈和老婆掉水里先救谁”.“中午吃啥晚上吃啥”.“技术男怎么学会撩妹”……这些问题,统统不会告诉你.售后TEAM作为一支专 ...
- git上传项目代码到github
参考: git学习——上传项目代码到github github上传时出现error: src refspec master does not match any解决办法 git 上传本地文件到gith ...
- iOS开发技巧-2
1,打印View所有子视图 po [[self view]recursiveDescription] 2,layoutSubviews调用的调用时机 * 当视图第一次显示的时候会被调用 * 当这个视图 ...
- 黑马程序员——C语言基础 内存剖析
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)进制 进制是一种计数的方式,数值的表示形式.有多种进制十进制.二进制 ...
- Android事件分发机制(下)
这篇文章继续讨论Android事件分发机制,首先我们来探讨一下,什么是ViewGroup?它和普通的View有什么区别? 顾名思义,ViewGroup就是一组View的集合,它包含很多的子View和子 ...
- php 文件操作
$fn="e:\debug.txt"; if(is_writable($fn)==false){ die("不能写入"); } file_put_content ...
- HTML5 拖动
触发的事件有:dragstart事件.drag事件和dragend事件. 按下鼠标键并开始移动鼠标的时候,会在被拖拽的元素上触发dragstart事件.这时候光标变成”不能放”符号(圆环中有一条反斜线 ...
- sql转db,后台坑货
打开 创建一个db文件然后点击文件--新建---Sqlite 导入空db成功后点击左侧栏 点击表 点击右上角+号把sql文件的语句复制粘贴到 然后点击运行,运行完成后保存ok