首先,我们要了解:什么是彩色空间呢?
许多人都知道在绘画时可以使用红色、黄色和蓝色这三种原色生成不同的颜色,这些颜色就定义了一个色彩空间。我们将品红色的量定义为X 坐标轴、青色的量定义为Y坐标轴、黄色的量定义为Z坐标轴,这样就得到一个三维空间,每种可能的颜色在这个三维空间中都有唯一的一个位置。
但是,这并不是唯一的一个色彩空间。例如,当在计算机监视器上显示颜色的时候,通常使用RGB(红色、绿色、蓝色)色彩空间定义,这是另外一种生成同样颜色的方法,红色、绿色、蓝色被当作X、Y和Z坐标轴。另外一个生成同样颜色的方法是使用色相(X轴)、饱和度(Y轴)和明度(Z轴)表示,这种方法称为HSB色彩空间。另外还有许多其它的色彩空间,许多可以按照这种方法用三维(X、Y、Z)、更多或者更少维表示,但是有些根本不能用这种方法表示。

下面介绍几种常用的彩色空间:

一、利用原色相混的比例表示的彩色空间

RGB(三原色光模式)采用加法混色法,因为它是描述各种“光”通过何种比例来产生颜色。光线从暗黑开始不断叠加产生颜色。RGB描述的是红绿蓝三色光的数值。RGBA是在RGB上增加阿尔法通道实现透明效果。基于RGB模式的普通色彩空间有sRGB, Adobe RGB和Adobe Wide Gamut RGB。

CMYK(印刷四分色模式)印刷过程中使用减法混色法,因为它描述的是需要使用何种油墨,通过光的反射显示出颜色。它是在一种白色介质(画板,页面等)上使用油墨来体现图像。CMYK描述的是青,品红,黄和黑四种油墨的数值。根据不同的油墨,介质,和印刷特性,存在多种CMYK色彩空间。(可以通过色点扩张或者转换各种油墨数值从而得到不同的外观)。

二、利用不同的概念表示的彩色空间
HSV
 (色相hue, 饱和度saturation, 明度value),也称HSB (B指brightness)是艺术家们常用的,因为与加法减法混色的术语相比,使用色相,饱和度等概念描述色彩更自然直观。HSV是RGB色彩空间的一种变形,它的内容与色彩尺度与其出处——RGB色彩空间有密切联系。将RGB转换为HSV的函数是rgb2hsv;

HSV的彩色模型可以用一个圆柱体和展开的圆柱表示,如下图:


HSI (色相hue,饱和度saturation,饱和度intensity),也称HSL。该模型将亮度分量与一幅彩色图像中携带的彩色信息分开。因此,HSI模型对于开发基于彩色描述的图像处理算法是一个理想的工具,对人类来说,它们看起来更加自然和直观。

三、不同彩色空间之间的转换

对于彩色图象分割而言,有时需要将RGB变换为HSI坐标,以便反映人类观察彩色的方式,转换公式如下:



了解了彩色空间以后,我们就来看一看OpenCV函数里面的cvtColor函数:

函数作用:Converts an image from one color space to another.

C++: void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 )

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

Parameters:  

src – input image: 8-bit unsigned, 16-bit unsigned ( CV_16UC... ), or single-precision floating-point.
dst – output image of the same size and depth as src.
code – color space conversion code (see the description below).

dstCn – number of channels in the destination image; if the parameter is 0, the number of the channels is derived automatically from src and code .

在OpenCV里面RGB的通道顺序是B、G、R。因此在一个标准(24位)的彩色图像中第一8位就是Blue component,然后是Green, 第三个是Red。而第4、5、6 bytes would then be the second pixel (Blue, then Green, then Red), and so on.

R G B各通道值得范围如下:

  • 0 to 255 for CV_8U images
  • 0 to 65535 for CV_16U images
  • 0 to 1 for CV_32F images

关于cvtColor的源代码,原本我是想贴上去,但是~太长了将近3000行,看的人晕头转向,需要研究的请下载!!

一个应用:

[cpp] view plaincopy
  1. #include <iostream>
  2. #include <opencv.hpp>
  3. #include <string>
  4. using namespace cv;
  5. using namespace std;
  6. int main(){
  7. string imgpath = "E:\\快盘\\娱乐生活\\素材\\GEM.jpg";
  8. Mat img = imread(imgpath);
  9. Mat outimg;
  10. if (img.empty())
  11. {
  12. cout<<"Can not load the image!";
  13. }
  14. imshow("image",img);
  15. cvtColor(img,outimg,CV_BGR2GRAY);
  16. imshow("Gray",outimg);
  17. waitKey();
  18. return 0;
  19. }

彩色空间及cvtColor解析相关推荐

  1. 彩色图像处理 彩色空间转换及代码实现

    一.彩色图像基础 为什么要研究彩色图像处理? 符合人类视觉特点:人类可以辨别几千种颜色色调和亮度:只能辨别几十种灰度层次. 有用的描绘子:简化目标物的区分:目标识别,根据目标的颜色特征. 彩色图像处理 ...

  2. Python实现数字图像处理之5种彩色空间转换(单图+多图+视频)

    本文主要运用用Python代码实现了5种彩色空间之间的转换! 具体而言,包括: 1)RGB → CMY: 2)  CMY → RGB: 3)  RGB → HSI: 4)  HSI → RGB: 5) ...

  3. 基于OpenCV的彩色空间互转

    Datawhale干货 作者:姚童,Datawhale优秀学习者 图像彩色空间互转在图像处理中应用非常广泛,而且很多算法只对灰度图有效:另外,相比RGB,其他颜色空间(比如HSV.HSI)更具可分离性 ...

  4. 第6章 Python 数字图像处理(DIP) - 彩色图像处理3 -色彩变换、彩色校正、彩色图像平滑和锐化、HSI彩色空间中的分割、RGB空间中的分割、彩色边缘检测

    这里写目录标题 色彩变换 彩色图像平滑和锐化 使用彩色分割图像 HSI 彩色空间中的分割 RGB空间中的分割 彩色边缘检测 彩色图像中的噪声 色彩变换 # 图像颜色分量的显示 from PIL imp ...

  5. 计算机视觉基础——图像处理(彩色空间互转)cpp+python

    3.1 简介 图像彩色空间互转在图像处理中应用非常广泛,而且很多算法只对灰度图有效:另外,相比RGB,其他颜色空间(比如HSV.HSI)更具可分离性和可操作性,所以很多图像算法需要将图像从RGB转为其 ...

  6. 【学习 OpenCV】—— 将一个3通道的像素点转换到新的彩色空间

    将一个3通道的像素点,cv::Vec<uchar, 3> target,转换到新的彩色空间,比如 Lab 彩色空间. 因为封装好的 api cv::cvtColor() 处理的对象是 cv ...

  7. 图像处理-3 彩色空间互转

    Datawhale 计算机视觉基础-图像处理(上)-Task03 彩色空间互转 3.1 简介 图像彩色空间互转在图像处理中应用非常广泛,而且很多算法只对灰度图有效:另外,相比RGB,其他颜色空间(比如 ...

  8. mysql5.7空间运算,深度解析MySQL5.7之临时表空间

    临时表 临时表顾名思义,就是临时的,用完销毁掉的表. 数据既可以保存在临时的文件系统上,也可以保存在固定的磁盘文件系统上. 临时表有下面几种: 1.全局临时表 这种临时表从数据库实例启动后开始生效,在 ...

  9. 实验一:彩色空间转换(YUV2RGB)

    实验一:彩色空间转换 #ifndef/#define/#endif 使用详解:http://blog.csdn.net/abc5382334/article/details/18052757 Debu ...

最新文章

  1. Python时间序列模型推理预测实战:时序推理数据预处理(特征生成、lstm输入结构组织)、模型加载、模型预测结果保存、条件判断模型循环运行
  2. Android开发学习笔记:对话框浅析
  3. 批量正则替换某文件夹中代码(div id=XXXX替换为div id=XXXX)
  4. 服饰新消费的2021:传统快时尚败退,内衣、汉服等细分赛道狂欢
  5. YOLOv5初探(看来这个YOLO5做得还不是很完善,过段时间再试试??)
  6. python 装饰器有哪些_python之装饰器
  7. 资深大牛推荐学习路线建议
  8. SqlServer 的IDENTITY_INSERT设置为OFF问题
  9. python列表初始化为1_python初始化list列表(1维、2维)
  10. SpringBoot之idea打包以及启动jar包
  11. Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案...
  12. ubuntu下arpoison安装
  13. 搜狗浏览器安装插件(.crx)
  14. linux内核代码_解决Linux内核代码审阅者短缺的问题
  15. Java Server Faces_JSF ( JavaServer Faces ) 介绍
  16. sa-token集成jwt
  17. 最漂亮HTML5高端个人简历自适应模板
  18. mysql查询字段大于小于_sql查询大于字段的所有数据,或小于字段的所有数据
  19. 《解题报告》(第19讲) 进制转换(一) - 入门
  20. Python 教你哄女票开心

热门文章

  1. oracle 存储过程的基本语法
  2. 只因为离职报告多写这三个字,员工竟然倒赔公司2.9万!
  3. 东汉末年,他们把「服务雪崩」玩到了极致
  4. 为什么MySQL不推荐使用 UUID 或者雪花id作为主键?
  5. 嘿嘿,我就知道面试官接下来要问我 ConcurrentHashMap 底层原理了,看我怎么秀他...
  6. 为什么分布式一定要有消息队列?
  7. 互联网分层架构,为啥要前后端分离?
  8. 最新发现6个高质量网站,让人眼前一亮!
  9. 远程办公时,有哪些提高沟通效率的技巧?
  10. 谷歌内部考核制度OKR是怎么样的?你会用OKR吗?