一. 使用cvCvtColor函数将RGB颜色空间转换到HSV颜色空间

所需函数:

1.cvCvtColor

函数功能:颜色空间转换

函数原型:

void  cvCvtColor( const CvArr* src, CvArr* dst, int code );

参数介绍:

const CvArr* src:    输入图像
CvArr* dst:    输出图像(输出图像必须和输入图像的size,颜色位深度,通道一致)
        int code:    要转换的颜色空间,可取自宏:CV_BGR2GRAY表示转换为灰度图,CV_BGR2HSV将图片从RGB空间转换为HSV空间,其中当code选用CV_BGR2GRAY时,dst需要是单通道图片。当code选用CV_BGR2HSV时,对于8位图,需要将RGB值(RGB三色叠加)归一化到0-1之间。这样得到HSV图中的H范围才是0-360,S和V的范围是0-1。  

2.开始编写代码

开始编写代码之前需要准备一张用于实验的图像:

如有需要自行保存,JPG格式!

首先完成RGB到HSV颜色空间的转换功能,代码如下:

2.1 打开图像

//加载图像到内存IplImage *image = cvLoadImage("D:\\1.jpg");  //将图像加载到内存if (image == NULL){     //判断是否加载成功printf("图像文件打开失败");}

2.2 创建一张空白图像用于存储图像转换成HSV颜色空间后的图像

//创建一张空白图像用于存储转换成HSV颜色空间后的图像IplImage *image1 = cvCreateImage(cvSize(image->width, image->height), image->depth, image->nChannels);  //注意图像必须和输入图像的size,颜色位深度,通道一致cvZero(image1);  //清空image_data数据

2.3 颜色空间转换

//颜色空间转换
cvCvtColor(image, image1, CV_BGR2HSV);//CV_BGR2HSV

2.4 显示图像

//显示图像
cvNamedWindow("RGB", 0);  //RGB
cvNamedWindow("HSV", 0);  //HSV
cvShowImage("RGB", image);
cvShowImage("HSV", image1);
cvWaitKey(0);   //message

运行结果:

完整代码:

//加载图像到内存IplImage *image = cvLoadImage("D:\\1.jpg");  //将图像加载到内存if (image == NULL){     //判断是否加载成功printf("图像文件打开失败");}//创建一张空白图像用于存储转换成HSV颜色空间后的图像IplImage *image1 = cvCreateImage(cvSize(image->width, image->height), image->depth, image->nChannels); //注意图像必须和输入图像的size,颜色位深度,通道一致cvZero(image1);  //清空image_data数据//颜色空间转换cvCvtColor(image, image1, CV_BGR2HSV);//CV_BGR2HSV//显示图像cvNamedWindow("RGB", 0);  //RGBcvNamedWindow("HSV", 0); //HSVcvShowImage("RGB", image);cvShowImage("HSV", image1);cvWaitKey(0); //message

cvCvtColor转换RGB到HSV使用的算法公式如下:

相关链接: RGB颜色空间、色调、饱和度、亮度、HSV颜色空间详解

二. 使用cvCvtColor函数将RGB颜色空间转换到灰度颜色空间

上面已经介绍过cvCvtColor函数所以直接开始编写代码

其实代码非常简单,我们可以复用上面的代码只需要简单的修改一下 cvCreateImage的最后两个参数和cvCvtColor最后一个code参数

IplImage *image1 = cvCreateImage(cvSize(image->width, image->height), 8, 1);  //注意图像必须和输入图像的size,灰度图属于单通道所以颜色深度为8,通道数为1
cvCvtColor(image, image1, CV_BGR2GRAY);//CV_BGR2GRAY

运行结果:

完整代码:

 //加载图像到内存IplImage *image = cvLoadImage("D:\\1.jpg"); //将图像加载到内存if (image == NULL){     //判断是否加载成功printf("图像文件打开失败");}//创建一张空白图像用于存储转换成灰度颜色空间后的图像IplImage *image1 = cvCreateImage(cvSize(image->width, image->height), 8, 1);  //注意图像必须和输入图像的size,灰度图属于单通道所以颜色深度为8,通道数为1cvZero(image1);  //清空image_data数据//颜色空间转换cvCvtColor(image, image1, CV_BGR2GRAY);//CV_BGR2GRAY//显示图像cvNamedWindow("RGB", 0);    //RGBcvNamedWindow("灰度图", 0); //HSVcvShowImage("RGB", image);cvShowImage("灰度图", image1);cvWaitKey(0); //message

使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图相关推荐

  1. 【OpenCV 例程300篇】209. HSV 颜色空间的彩色图像分割

    OpenCV 例程200篇 总目录 [youcans 的 OpenCV 例程300篇]209. HSV 颜色空间的彩色图像分割 5.1 HSV 颜色空间的彩色图像分割 HSV 模型是针对用户观感的一种 ...

  2. RGB、YUV、HSV颜色空间模型

    文章目录 一.概述 二.RGB颜色空间 三.YUV颜色空间 四.HSV颜色空间 一.概述 颜色通常用三个独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间.但被描述的颜色对 ...

  3. RGB图像转换成HSV图像,HSV图像转换为RGB图像

    HSV 即使用 色相(Hue).饱和度(Saturation).明度(Value) 来表示色彩的一种方式 色相:将颜色用0°到360°表示,就是我们日常讲的颜色名称,如红色.蓝色等. 色相与颜色对应关 ...

  4. 【Python·OpenCV】如何实现 HSV 与灰度图的相互转换?

    文章目录 一.引言 二.为什么需要 HSV ? 三.HSV 三个分量表示什么? 四.绘图误区 五.HSV 和灰度图的转换 六.参考链接 Github 项目地址:https://github.com/S ...

  5. RGB、YUV和HSV颜色空间模型

    一.概述 颜色通常用三个独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间.但被描述的颜色对象本身是客观的,不同颜色空间只是从不同的角度去衡量同一个对象.颜色空间按照基本机 ...

  6. 使用MFC实现将图像的RGB值转换到HSV空间,同时进行调节HSV,再将调节后的HSV值传进去转换到RGB空间实现图像在HSV空间中的色度、饱和度、亮度的调节

    工程上传到了github ,之前有一版忘记推送了,现在这个链接应该是没问题的了 工程的github链接 希望能帮到你. 文章内容: 1.回顾上文 2.实验步骤&要点提示&代码分析 3. ...

  7. opencv 图像分割 阈值分割 图像二值化 灰度图

    # -*- coding: utf-8 -*- """ @File : 191213_测试_阈值分割.py @Time : 2019/12/13 15:14 @Autho ...

  8. 根据RGB图像中颜色值生成标签灰度图,

    1.前言: 代码目的:将RGB图像中不同的颜色生成标签灰度图,cyan[青蓝色]映射为0,red[红色]映射为1,yellow[黄色]映射为2 2.代码 # -*- coding: utf-8 -*- ...

  9. 使用OpenCV实现RGB、HSI、CMYK颜色空间的转换

    RGB to HSI.CMYK的代码实现 前言: 在之前博文的基础上,我使用OpenCV2实现了RGB颜色空间向HIS.CMYK转换的代码.下列链接为各种经典颜色空间的介绍及转换公式的介绍. http ...

最新文章

  1. linux ssh权限漏洞,OpenSSH do_setup_env函数权限提升漏洞(CVE-2015-8325)
  2. Java的知识点10——static关键字、静态初始化块、 参数传值机制、包、导入类import、 静态导入
  3. OpenGL 绘制grass草的实例
  4. SQL Server 日志清理、数据文件收缩
  5. Java基础---“方法”题目练习
  6. redistemplate 设置失效时间_开发新技能之利用Redis高级用法监听过期键处理失效的订单...
  7. 项目管理学习总结(4)——项目团队,如何展开有效沟通?
  8. 统一对比学习框架?没错它来了。
  9. 解决ubuntu下不能mount windows 盘的问题
  10. 第一天docker入门
  11. python教程2019全套-如何领取Python2019 全套视频教程
  12. Theano学习笔记:Theano的艰辛安装体验
  13. 零基础Python知识点回顾(三)
  14. C#窗体之整人小程序
  15. Python井字棋游戏开发带实验报告
  16. Linux网络管理之ss命令– 显示活动套接字信息
  17. GDK动态代理原理分析
  18. vivado安装步骤
  19. Bandwagon的配置记录(二) —— ftp文件传输
  20. 基于JSP的电影院售票系统

热门文章

  1. centos linux mysql 5.5脚本全自动源码包 编译安装
  2. linux 内核协议栈 ip_rcv_finish,Linux内核协议栈学习笔记(二)--netfilter框架
  3. 一键 caddy php h5ai_H5ai 在线播放搭建
  4. 土豆服务器延期修复,DNF更新推迟, 土豆服务器发霉了?
  5. vscode 5500 but failed to open in Browser Preview. Got Browser Preview extension installed?
  6. espresso java_java – Espresso单击菜单项
  7. java8种基本类型长度_【Java基础】Java的8种基本数据类型深入介绍
  8. java rector_Java IO的Reactor模式
  9. 巅峰抢购助手pc_豌豆荚、91助手宣布暂停部分服务!第三方应用商店为何式微?...
  10. python语言程序设计实践教程实验八答案_Python程序设计实验报告: 实验八 文件...