点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达引言

重新写了一下图像色彩空间相关的知识,希望给大家多一点背景多点了解,不说别的,看完了肯定会涨知识。

RGB色彩空间

图像处理最基础的知识点之一就是图像色彩跟颜色模型,对计算机来说表示一张图

像,只是一些零壹的二进制值,但是对人眼来说看到的都是一些可见光,而且人眼只对三种可见光比较敏感,分别是红色(red)、绿色(green)、蓝色(blue)。这个就是最基本的RGB颜色模型,三种颜色的波长范围表示如下:

Blue: 450–495 nm
Green: 495–570 nm
Yellow: 570–590 nm

针对人眼对颜色这个物理现象的生物感知表达模型,国际照明协会在1931年发布了一个颜色模型/色彩空间,表示如下:

因此就出现了对应颜色模型的色彩空间CIE XYZ模型,对于的表示色度跟亮度表示,图示如下:

从这个上面看不到Z,其实Z是表示颜色得亮度,或者深度,所以CIE XYZ颜色模型的这个图又被称为CIE 色度图。CIE XYZ颜色模型表示的范围比较大,所以后来微软跟惠普就提出了一个它的子集的颜色模型sRGB色彩空间,其中S是英文单词标准的首字母,sRGB色彩空间的表示如下:

上面的黑色三角形区域就称为sRGB色彩空间,被广泛应用在个人电脑显示器、打印机、数码相机中,占据了大量市场份额、到了90年代的时候Adobe公司提出了一个新RGB色彩空间模型Adobe RGB色彩空间,它比sRGB色彩空间有更大的取值范围,因此色彩更加细腻更加丰富,它的色彩空间图示如下:

从图中可以看成Adobe RGB色彩空间是比sRGB色彩空间大的,但是这个也有缺陷,就是不同色彩空间生成的彩色图像,在不同的设备上显示或者浏览会出现色差,为了解决这个问题,需要对不同色彩空间之间建立转换模型,实现不同色彩空间模型的转。后来RGB色彩空间就被大家玩坏了,现在常用的RGB色彩空间如下:

其中值得关注的部分是sRGB跟CMYK之间的相互转换,这个转换之后会导致很明显的色彩差异,原因在于CMYK色彩空间又一部分不在sRGB内部,所以这种情况下,需要对RGB色彩空间进行非线性变换,获得颜色补偿。原因在于多数商业打印机都是基于四色(Cyan, Yellow, Magenta and Black),无法打印一些sRGB范围的颜色,所以必须进行非线性变换跟补偿。这个其中最常见的就是Gamma校正。

非RGB色彩

RGB色彩空间比较丰富,但是它也是有缺点的,最大的缺点就是无法直观的区分图像颜色、亮度、饱和度等值。所以我们需要一些更加直观的图像色彩空间,排在第一位的就是HSV色彩空间,它直观,容易理解,因此在图像处理非常有用。

HSV色彩空间

RGB立方图色彩空间无法很好区分颜色与亮度的关系,要单独调整颜色或者亮度不是很方便,这个时候HSV色彩空间是一个很好的选择,它对颜色与亮度有着很好的区分度,HSV色彩空间图示如下:

解释如下:

  • H(Hue) 表示颜色通道,不同的值表示不同的颜色范围

  • S表示饱和度通道,表示色泽

  • V表示亮度通道,代表图像亮度高低级别

在H、S、V通道上对图像亮度跟颜色或者饱和度的调整就非常方便了,另外对一些特定的颜色值进行分离也比较方便了。

YCrCb色彩空间

YCrCb色彩空间被开发作为当时的数字分量视频的标准,它跟YUV色彩空间有着一定相似性,它的三个通道的取值范围分别被定义为:

  • Y通道:16~235

  • Cr通道:16~240

  • Cb通道:16~240

需要特别注意的是,RGB到YCrCb的色彩空间转换时候,不同的YCrCb色彩空间标准会有不同,下面标清电视跟高清电视上YCrCb的色彩差异:

很显然它们的转换公式也会有所不同,所以千万不用看到不同转换公式就大惊小怪的!

LAB色彩空间

LAB色彩空间又名CIE Lab / LAB,它的图示如下:

其中:

  • L通道表示亮度值

  • A通道表示红色/绿色值

  • B通道表示蓝色/黄色值

在LAB色彩空间,L表示亮度分量、AB表示颜色通道,所以有时候LAB色彩空间处理图像也会必RGB色彩空间好用,会有意想不到的好结果。

OpenCV实现

OpenCV色彩空间相互转换与操作的函数主要有两个,其中支持色彩空间转换的函数为:

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

参数解释如下

  • src 表示输入图像

  • dst 表示输出图像

  • code 表示空间转换代码,支持常见的各种色彩空间转换

从色彩空间中提取不同色颜色值函数:

void cv::inRange(
InputArray src,
InputArray      lowerb,
InputArray      upperb,
OutputArray   dst
)

参数解释如下:

  • src是输入图像

  • lowerb是取值范围最小值

  • upperb是取值范围最大值

  • dst是输出的mask图像,二值的

一个例子,绿色背景对象上前景对象提取,先看一下效果:

相关代码如下:

1#include <opencv2/opencv.hpp>2#include <iostream>34using namespace cv;5using namespace std;67int main(int argc, const char *argv[])8{9    Mat src = imread("D:/vcprojects/images/cat.jpg");
10    if (src.empty()) {
11        printf("could not load image...\n");
12        return -1;
13    }
14    namedWindow("input", WINDOW_AUTOSIZE);
15    imshow("input", src);
16
17    // RGB to HSV
18    Mat hsv;
19    cvtColor(src, hsv, COLOR_BGR2HSV);
20    imshow("hsv", hsv);
21
22    // RGB to YUV
23    Mat yuv;
24    cvtColor(src, yuv, COLOR_BGR2YUV);
25    imshow("yuv", yuv);
26
27    // RGB to YUV
28    Mat ycrcb;
29    cvtColor(src, ycrcb, COLOR_BGR2YCrCb);
30    imshow("ycrcb", ycrcb);
31
32    Mat src2 = imread("D:/javaopencv/tinygreen.png");
33    imshow("src2", src2);
34    cvtColor(src2, hsv, COLOR_BGR2HSV);
35    Mat mask;
36    inRange(hsv, Scalar(35, 43, 46), Scalar(99, 255, 255), mask);
37    imshow("mask", mask);
38
39    waitKey(0);
40    return 0;
41}

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

图像色彩空间与应用转换相关推荐

  1. opencv 图像色彩空间与应用转换

    参考链接:https://mp.weixin.qq.com/s/SaCqrhd8RVeKGDqo6vhUjg 原创 gloomyfish OpenCV学堂 图像色彩空间与应用转换 引言 重新写了一下图 ...

  2. day3 - 图像在不同色彩空间间的转换

    本期将了解三种不同的颜色空间,RGB,HSV,GRAY.会使用OpenCV来读取三种颜色空间,并且操作不同空间的转换,观察不同颜色空间的特点. 完成本期内容,你可以: 了解RGB,HSV,GRAY三种 ...

  3. Opencv学习笔记(八) -- 图像色彩空间转换

    1.常见图像色彩空间 RGB RGB色彩模式是工业界的一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红.绿.蓝三个通道 ...

  4. 扣图(图像色彩空间转换)

    利用图像色彩空间转换,进行扣图. import cv2 import numpy#创建图像 img=cv2.imread('jiuXinNai.jpg',cv2.IMREAD_REDUCED_COLO ...

  5. Opencv_03 图像色彩空间转换

    文章目录 一. 色彩空间介绍 ① RGB/BGR色彩空间 ② 为什么Opencv中采用的是BGR ③ HSV色彩空间 二.色彩空间转换 ① cvtColor()函数原型 ② 颜色空间转换案例 一. 色 ...

  6. python代码转换为pytorch_python、PyTorch图像读取与numpy转换

    python.PyTorch图像读取与numpy转换 发布时间:2018-06-15 16:27, 浏览次数:1147 , 标签: python PyTorch numpy Tensor转为numpy ...

  7. python、PyTorch图像读取与numpy转换

    原文:https://blog.csdn.net/yskyskyer123/article/details/80707038 python.PyTorch图像读取与numpy转换 Tensor转为nu ...

  8. Halcon —— 图像像素类型与转换

    图像类型 就目前工业领域主流的图像处理工具halcon来讲,有以下几种图像类型:'byte', 'complex', 'cyclic', 'direction', 'int1', 'int2', 'i ...

  9. 图像和base64的转换 uniapp开发

    图像和base64的转换 记录 一.插件地址 二.使用步骤 1.引入库 2.pathToBase64 3.base64ToPath 记录 使用uniapp开发微信小程序的过程中遇到,需要将图片转换为b ...

最新文章

  1. Linux下which、whereis、locate、find 命令的区别
  2. (五) : iview 时间选择器,校验不成功
  3. mongoose 执行删除操作的坑
  4. git clone 报错:error: RPC failed; curl 18 transfer closed with outstanding read
  5. 在Content provider实现中使用SQLiteOpenHelper
  6. css怎么实现加载的圆圈_图像高清方案——响应式图像让图像加载又快又省
  7. python selenium 等待元素_python3 selenium 设置元素等待的三种方法
  8. C#项目”XXXXX”针对的是”.NETFramework,Version=v4.7.1”但此计算机没有安装它
  9. NX_UG1872安装
  10. java中的xpath,读取xml文档。
  11. mysql执行sql流程_mysql 执行sql流程
  12. HEKA.FitMaster.v2.15(用来分析和测试那些通过Patchmaster或Pulse得
  13. Nginx简单入门与反向代理和负载均衡
  14. linux创建两块20G的磁盘,Linux 创建及扩展逻辑卷
  15. 用计算机数字唱歌,悬赏跪求计算器各种歌曲数字谱(最好带和音)
  16. “2022零信任神兽方阵”启动调研,欢迎各单位填报信息
  17. 因果性与因果模型 | 中国人民大学哲学与认知科学明德讲坛
  18. c语言程序设计上海理工,2017年上海理工大学医疗器械与食品学院854C程序设计考研题库...
  19. domino服务器库文件,Domino 服务器设置程序 涉及的文件
  20. QQ样式的在线客服代码

热门文章

  1. 金融业加速智能化,解析360金融AI基础架构和应用
  2. PythonR爬取分析赶集网北京二手房数据(附详细代码)
  3. 新浪程序员加班改bug,竟错失77万年会大奖
  4. TensorFlow 2.0新特性解读,Keras API成核心
  5. 云计算赋能人工智能,未来的红利在哪?
  6. Prometheus 如何做到“活学活用”,大牛总结的避坑指南
  7. RESTful API 设计规范精讲
  8. 高并发:RocketMQ 削峰实战!
  9. Java面试中最高频的那20%知识点是什么?
  10. 中科大倪茹:感谢开源,我从入门竞赛到Top 10的经验分享