OpenCV4机器学习(三):颜色空间(RGB、HSI(1)

RGB空间中的任何一个点可以转换成HSI空间中的点,具体的转换公式如下:
在这里插入图片描述

四、HSV颜色空间

HSV颜色空间中,H是Hue(色度)的缩写,S是Saturation(饱和度)的缩写,V是Value(亮度)的缩写:

  • 色度通常用来从宏观上区分某一种颜色,例如:白、黄、青、绿、品红、红、蓝、黑等就是色度;
  • 饱和度指的是颜色的纯度,通常情况下,颜色越鲜艳,饱和度越高;颜色越暗淡,饱和度越低;
  • 亮度指的是颜色的明暗程度,颜色越亮,亮度越高;颜色越暗,亮度越低。

HSV颜色空间的数学模型可以用一个圆锥来表示,如下图所示:

在这里插入图片描述
如图所示,某一像素的H可以由该点与白色基准线所形成的圆心角表示,H的取值范围为[0,360];某一点的S可以由该点与所在圆面的圆心之间的距离表示,距离越大,饱和度越高,反之越低;某一点的V可以由该点所在圆面与圆锥顶部之间的距离表示,距离越大,亮度越高,反之则越低。

RGB到HSV的转换公式如下:
在这里插入图片描述
HSV颜色空间不适合显示器系统,但是更符合人眼的视觉特性,因此通常会将颜色从RGB空间域转换到HSV颜色空间进行处理,然后在换回RGB域进行显示。

五、HSL颜色空间

HSL(色调、饱和度、亮度)空间,与HSV类似,只不过把V:Value替换为了L:Lightness。这两种表示在用途上类似,但在方法上有区别。

HSV和HSL二者在数学上都是圆柱,但HSV在概念上可以被认为是颜色的倒圆锥体(黑点在下顶点,白色在上底面圆心),HSL在概念上表示了一个双圆锥体和圆球体(白色在上顶点,黑色在下顶点,最大横切面的圆心是半程灰色)。注意尽管在HSL和HSV中“色调”指称相同的性质,它们的“饱和度”的定义是明显不同的。

RGB到HSL的转换公式如下:
在这里插入图片描述
在这里插入图片描述

六、Lab颜色空间

Lab颜色空间,弥补了RGB和CMYK两种色彩模式的不足。它是一种设备无关的颜色模型,也是一种基于生理特征的颜色模型。Lab颜色模型由三个要素组成:

  • 亮度L,反映光线强度;取值0~100;
  • 颜色通道a,a包括的颜色是从深绿色(低亮度值)到灰色(中亮度值)再到亮粉红色(高亮度值);取值-128~127;
  • 颜色通道b,是从亮蓝色(低亮度值)到灰色(中亮度值)再到黄色(高亮度值);取值-128~127。

这样规定是根据人类的视觉原理,灵长类动物的视觉都有两条通道:红绿通道和蓝黄通道,大多数动物最多只有一条通道,如果有人缺失其中一条,就是我们所说的色盲。

Lab模式对于PS极为重要,它是PS从一种颜色模式转换到另一种颜色模式的内部转化方式,PS从一种颜色模式转换到另一种颜色模式时,总是先转换到Lab模式。Lab色域是所有颜色模式中最宽广的,它囊括了RGB和CMYK的色域。

七、灰度颜色空间

很多类型的图像都没有色彩信息,只有亮度信息,通常使用灰度图表示,例如红外图像。灰度空间也是视觉机器学习任务中最基本的颜色空间。RGB空间转换为灰度空间的公式如下:

Y

=

0.299

×

R

0.587

×

G

0.114

×

B

Y = 0.299 \times R + 0.587 \times G + 0.114 \times B

Y=0.299×R+0.587×G+0.114×B

灰度空间转换为RGB空间的公式如下:

R

=

Y

,

G

=

Y

,

B

=

Y

R=Y, G=Y, B=Y

R=Y,G=Y,B=Y

八、颜色空间转换实战

cvtColor函数将输入的源图从某个颜色空间转换至另一个颜色空间。OpenCV的默认颜色空间为BGR,因此对于一个标准的3字节彩色图,第一个字节为8bit蓝色分量,第二个字节是8bit绿色分量,第三个字节是8bit红色分量。

cvtColor函数定义如下:

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

各参数含义:

  • src:输入图像,可以是8位无符号整型(CV_8U)、16位无符号整型(CV_16U)或单精度浮点型数据
  • dst:输出图像,与输入图像的类型、大小和位深度均相等
  • code:颜色空间转换码,指定颜色空间转换的类型
  • dstCn:目标图像的通道数。当dstCn=0时,通道数将根据code与源图通道数自动确定

指定颜色空间转换的类型,将原图转换到不同的颜色空间,代码如下所示:

#include <iostream>
#include<opencv.hpp>

using namespace std;
using namespace cv;

int main()
{
	Mat img = imread("D:\\VSProject\\OpenCV4\\chap02\\lena.jpg", 1);
	imshow("Original", img);
	//imwrite("Original", img);

	Mat img_gray,  img_hsv, img_hsl, img_lab, img_rgb;
	cvtColor(img, img_rgb, COLOR_BGR2RGB);   //BGR转RGB
	cvtColor(img, img_gray, COLOR_BGR2GRAY); //BGR转灰度图


![img](https://img-blog.csdnimg.cn/img_convert/f60de7dbad6b199c804bf50aad6d5a9a.png)
![img](https://img-blog.csdnimg.cn/img_convert/533c4733fb941a1ef543a28a6e5b70b2.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 14
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值