OpenCV中RGB和HSV转换的问题
1、一般情况下HSV模型各分量的取值范围为:H为0到360°,S为0到100%,V为0到255。但是在OpenCV中在由RGB转换到HSV的过程中,发现HSV中H为0到180°,S为0到255,V为0到255。代码如下:
IplImage* src = cvLoadImage("1.jpg",1);
IplImage* imghsv = cvCreateImage(cvGetSize(src),8,3);
cvCvtColor(src ,imghsv,CV_BGR2HSV);//BGR转换成HSV模型
2、上述图片保存的过程中,图像以8位3通道的形式保存,每个颜色分量占用8位,值的范围为0到255,所以OpenCV将H值的范围缩小了一半,变为0到180°。可以调用cvConverScale将图像从8位转换为32位float型。这样HSV的范围就是:H为0到360°,S为0到100%,V为0到255。测试代码如下:
Mat mat1 = cv::imread("1.png");
CvScalar s1;
CvScalar s2;
CvScalar s3;
IplImage image1 = mat1;
int width = mat1.rows;
int height = mat1.cols;
Mat mat2 = mat1.clone();
IplImage image2 = mat2;
cvCvtColor(&image1,&image2,CV_BGR2HSV);
IplImage* image3 = cvCreateImage(cvGetSize(&image1),IPL_DEPTH_32F,3);
cvConvertScale(&image1,image3,1.0,0); //将src图像从8位转换成32位float型变量
IplImage* imghsv = cvCreateImage(mat1.size(),IPL_DEPTH_32F,3);
cvCvtColor(image3,imghsv,CV_BGR2HSV);//BGR转换成HSV模型
for(int i=0; i<width; i++)
{
for(int j=0; j<height; j++)
{
s1 = cvGet2D(&image1, i, j);
s2 = cvGet2D(&image2, i, j);
s3 = cvGet2D(imghsv, i, j);
}
}
3、当进行HSV各分量显示的时候,可以通过cvSplit函数将各通道分离,然后通过cvConvertScale函数将各分量的范围都转化成0到255,在通过8位无符号型图像显示即可。因为cvShowImage函数只能显示8位无符号型图像,不能显示32位Float型图像。
4、当进行HSV模型还原到RGB模型时,这里使用cvCvtColor函数就要注意,输入的HSV模型的图像必须将HSV各分量还原到默认的范围。这样cvCvtColor转换后的RGB图像才是正确的。
参考:
http://blog.csdn.net/harryching/article/details/20486003
OpenCV中RGB和HSV转换的问题的更多相关文章
- Opencv中RGB通道/HSV通道并分离
OpenCV中HSV颜色模型及颜色分量范围 opencv HSV 颜色模型(H通道取值 && CV_BGR2HSV_FULL) [opencv]在hsv颜色空间识别区域颜色 将原图分离 ...
- opencv中RGB转HSV
cvCvtColor(src,dst,CV_BGR2HSV); 当中,src为三通道的,dst也为三通道的. OPENCV 中 H.S.V.顺序分别为3*x+0 3*x+1 3*x+2 open ...
- 关于opencv中的颜色模型转换之CV_BGR2HSV
1.opencv函数cvCvtColor(rgb_im,hsv_im,CV_BGR2HSV)中使用的RGB颜色空间转到HSV算法: max=max(R,G,B) min=min(R,G,B) if R ...
- Delphi图像处理 -- RGB与HSV转换
阅读提示: <Delphi图像处理>系列以效率为侧重点,一般代码为PASCAL,核心代码采用BASM. <C++图像处理>系列以代码清晰,可读性为主,全部使用C ...
- OpenCV中的图像形态学转换
两个基本的形态学操作是腐蚀和膨胀.他们的变化构成了开运算,闭运算,梯度等.下面以这张图为例 1.腐蚀 这个操作会把前景物体的边界腐蚀掉. import cv2 import numpy as np i ...
- [图像类名词解释][ RGB YUV HSV相关解释说明]
一.概述 颜色通常用三个独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间.但被描述的颜色对象本身是客观的,不同颜色空间只是从不同的角度去衡量同一个对象.颜色空间按照基本机 ...
- 颜色空间模型 与 Opencv中的HSV模型范围
颜色空间总结 RGB.HSV.YUV 什么是颜色 Wiki是这样说的:颜色或色彩是通过眼.脑和我们的生活经验所产生的一种对光的视觉效应.嗯,简单点说,颜色就是人对光的一种感觉,由大脑产生的一种感觉.感 ...
- 颜色空间RGB与HSV(HSL)的转换
一般的3D编程只需要使用RGB颜色空间就好了,但其实美术人员更多的是使用HSV(HSL),因为可以方便的调整饱和度和亮度. 有时候美术需要程序帮助调整饱和度来达到特定风格的渲染效果,这时候就需要转换颜 ...
- 【视频开发】OpenCV中Mat,图像二维指针和CxImage类的转换
在做图像处理中,常用的函数接口有OpenCV中的Mat图像类,有时候需要直接用二维指针开辟内存直接存储图像数据,有时候需要用到CxImage类存储图像.本文主要是总结下这三类存储方式之间的图像数据的转 ...
随机推荐
- 使用JMeter进行一次简单的带json数据的post请求测试,json可配置参数
配置: 1.新建一个线程组: 然后设置线程数.运行时间.重复次数. 2.新建Http请求: 设置服务器域名,路径,方法,编码格式,数据内容. 可以在函数助手中,编辑所需要的变量,比如本例中的随机生成电 ...
- Git与GitHub学习笔记(一)如何删除github里面的文件夹?
按照以下步骤即可(本地删除) 1. git pull you git url2. git checkout 3. rm -r dirName4. git add --all5. git commit ...
- 使用C#的HttpWebRequest模拟登陆网站
很久没有写新的东西了,今天在工作中遇到的一个问题,感觉很有用,有种想记下来的冲动. 这篇文章是有关模拟登录网站方面的. 实现步骤: 启用一个web会话 发送模拟数据请求(POST或者GET) 获取会话 ...
- 队列 Queue 与 生产者消费模型
队列:先进先出 # from multiprocessing import Queue # Q = Queue(4) # Q.put('a') # Q.put('b') # Q.put('b') # ...
- idea整合SVN以及SVN的使用
idea整合SVN以及SVN的使用: 1:下载插件: 运行并安装: 安装后的目录: 2-1 打开bin目录 :复制svn.exe的文件路径: 2:打开IDEA的File-->setting: o ...
- VM克隆后找不到eth0的问题解决
问题描述 使用VM WorkStation新建虚拟机A,查看IP信息,显示结果: [root@centos65x64 ~]# ifconfig -a eth0 Link encap:Ethernet ...
- vue中异步函数async和await的用法
整理的不错,收藏一下 http://blog.sina.com.cn/s/blog_13d06fc1f0102wzfr.html
- 设置 Visual Studio IIS Express 站点局域网访问
Ø Visual Stuido 的 IIS Express运行一个网站时,默认地址是这样的:http://localhost:23167/Cache/Three,其中 localhost 表示本机, ...
- None.js 第一步 开启一个服务 hello world
引入 http 模块 var http = require('http'); 创建服务器 http.createServer(function (request, response) { // 发送一 ...
- Idea运行web项目时,提示java.lang.ClassNotFoundException: com.mysql.jdbc.Driver解决方法
今天用 idea写了个工程.结果最后报错,错误信息如下: java.lang.ClassNotFoundException: com.mysql.jdbc.Driverat org.apache.ca ...