03-颜色空间互转

简介

图像颜色空间互转在图像处理中应用非常广泛,而且很多算法只对灰度图有效;另外,相比RGB,其他颜色空间(比如HSV、HSI)更具可分离性和可操作性,所以很多图像算法需要将图像从RGB转为其他颜色空间,所以图像颜色互转是十分重要和关键的。

算法理论介绍

颜色空间转换

在 OpenCV 中有 超过150 种进行颜色空间转换的方法。但是你以后就会发现我们经常用到的也就两种:BGR↔Gray 和 BGR↔HSV。这里给出OpenCV中文文档

我们用到的函数是cv2.cvtColor(input_imageflag),其中flag就是转换类型。

对于BGR↔Gray的转换,我们使用的flag就是cv2.COLOR_BGR2GRAY。

同样对于BGR↔HSV的转换我们用的flag就是cv2.COLOR_BGR2HSV。

你可以下的命令得到所有可用的 flag。

import cv2
import numpy as np

for i in dir(cv2):
#startswith()函数是Python的字符串函数,用于检测字符串是否以指定字符串开头。如果是则返回True,否则返回False.
    if i.startswith('COLOR_'):  #i为待检验字符串,检测i字符串是否是含有括号里面字符串的开头
        print(i)
#简写
flags=[i for i in dir(cv2) if i.startswith('COLOR_')]
print(flags)
1.RGB与灰度图互转

RGB(红绿蓝)是依据人眼识别的颜色定义出的空间,可表示大部分颜色。但在科学研究一般不采用RGB颜色空间,因为它的细节难以进行数字化的调整。它将色调,亮度,饱和度三个量放在一起表示,很难分开。它是最通用的面向硬件的彩色模型。该模型用于彩色监视器和一大类彩色视频摄像。
RGB颜色空间 基于颜色的加法混色原理,从黑色不断叠加Red,Green,Blue的颜色,最终可以得到白色光。如下图:
在这里插入图片描述

将R、G、B三个通道作为笛卡尔坐标系中的X、Y、Z轴,就得到了一种对于颜色的空间描述,如下图:
在这里插入图片描述

对于彩色图转灰度图,有一个很著名的心理学公式:
Gray = R * 0.299 + G * 0.587 + B * 0.114

互转公式

参照OpenCV官方文档,公式如下:
在这里插入图片描述

代码实现

from PIL import Image
img=Image.open("qq.JPG")
img.show()
L = img.convert('L')
L.show()

效果如下:
在这里插入图片描述

2.RGB与HSI互转
HSI简介

HSI色彩空间是从人的视觉系统出发,直接用颜色三要素:色调(Hue)、饱和度(Saturation或Chroma)和亮度 (Intensity或Brightness)来描述色彩。
HSI也称HSL(L指lightness/luminance)。

  • H——表示颜色的相位角,是彩色最重要的属性,决定颜色的本质。红、绿、蓝分别相隔120度;互补色分别相差180度,即颜色的类别。
  • S——表示颜色的深浅程度,饱和度越高,颜色越深。与白色的比例有关,白色比例越多,饱和度越低。
  • I——表示色彩的明亮程度,人眼对亮度很敏感。

HSI彩色空间可以用一个圆锥空间模型来描述:
在这里插入图片描述
可以看到HSI色彩空间和RGB色彩空间只是同一物理量的不同表示法,因而它们之间存在着转换关系:HSI颜色模式中的色调使用颜色类别表示,饱和度与颜色的白光光亮亮度刚好成反比,代表灰色与色调的比例,亮度是颜色的相对明暗程度。

由于人的视觉对亮度的敏感程度远强于对颜色浓淡的敏感程度,为了便于颜色处理和识别,人的市局系统经常采用HSI彩色空间,它比RGB空间更符合人的视觉特性。此外,由于HSI空间中亮度和色度具有可分离性,使得图像处理和机器视觉中大量灰度处理算法都可在HSI空间方便进行。

应用:可以用于偏光矫正、去除阴影、图像分割等。

互转公式

参照OpenCV官方文档,公式如下:
在这里插入图片描述

代码

import cv2
img =cv2.imread("qq.JPG")
hsi_img=cv2.cvtColor(img,cv2.COLOR_BGR2HSI)#原始RGB转化成HSI 
rgb_img = cv2.cvtColor(hsi_img,cv2.COLOR_HSV2BGR)#HSI转化成RGB

# cv2.imshow('Origin',img)
cv2.imshow('HSI',hsi_img)
cv2.imshow('RGB',rgb_img)

cv2.waitKey(0)
cv2.destroyAllWindows()

效果如下
在这里插入图片描述

3.RGB与HSV互转
HSV简介

HSV是一种将RGB色彩空间中的点在倒圆锥体中的表示方法。HSV即色相(Hue)、饱和度(Saturation)、明度(Value),又称HSB(B即Brightness)。色相是色彩的基本属性,就是平常说的颜色的名称,如红色、黄色等。饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。明度(V),取0-max(计算机中HSV取值范围和存储的长度有关)。HSV颜色空间可以用一个圆锥空间模型来描述。圆锥的顶点处,V=0,H和S无定义,代表黑色。圆锥的顶面中心处V=max,S=0,H无定义,代表白色。

HSV模型:
在这里插入图片描述

这个模型就是按色彩、深浅、明暗来描述的。

H是色彩;

S是深浅, S = 0时,只有灰度;

V是明暗,表示色彩的明亮程度,但与光强无直接联系。
在这里插入图片描述

应用:同HSI一样,可以用于偏光矫正、去除阴影、图像分割等。

互转公式

参照OpenCV官方文档,公式如下:

在这里插入图片描述

import cv2
img =cv2.imread("qq.JPG")
hsv_img=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#改变转化类型
rgb_img = cv2.cvtColor(hsv_img,cv2.COLOR_HSV2BGR)

# cv2.imshow('Origin',img)
cv2.imshow('HSV',hsv_img)
cv2.imshow('RGB',rgb_img)

cv2.waitKey(0)
cv2.destroyAllWindows()

效果如下
在这里插入图片描述

4.HSV与HSI区别

HSV
是RGB色彩空间的一种变形,它的内容与色彩尺度与其出处——RGB色彩空间有密切联系。对应的媒介是人眼。
HSI (I指intensity) 与 HSV非常相似,仅用亮度(lightness)替代了明度(brightness)。工业上使用更常见。

二者区别在于,一种纯色的明度等于白色的明度,而纯色的亮度等于中度灰

HSV(hue,saturation,value)颜色空间的模型对应于圆柱坐标系中的一个圆锥形子集,圆锥的顶面对应于V=1. 它包含RGB模型中的R=1,G=1,B=1 三个面,所代表的颜色较亮。色彩H由绕V轴的旋转角给定。红色对应于 角度0° ,绿色对应于角度120°,蓝色对应于角度240°。在HSV颜色模型中,每一种颜色和它的补色相差180° 。 饱和度S取值从0到1,所以圆锥顶面的半径为1。HSV颜色模型所代表的颜色域是CIE色度图的一个子集,这个 模型中饱和度为百分之百的颜色,其纯度一般小于百分之百。在圆锥的顶点(即原点)处,V=0,H和S无定义, 代表黑色。圆锥的顶面中心处S=0,V=1,H无定义,代表白色。从该点到原点代表亮度渐暗的灰色,即具有不同 灰度的灰色。对于这些点,S=0,H的值无定义。可以说,HSV模型中的V轴对应于RGB颜色空间中的主对角线。 在圆锥顶面的圆周上的颜色,V=1,S=1,这种颜色是纯色。HSV模型对应于画家配色的方法。画家用改变色浓和 色深的方法从某种纯色获得不同色调的颜色,在一种纯色中加入白色以改变色浓,加入黑色以改变色深,同时 加入不同比例的白色,黑色即可获得各种不同的色调。

HSI色彩空间是从人的视觉系统出发,用色调(Hue)、色饱和度(Saturation或Chroma)和亮度 (Intensity或Brightness)来描述色彩。HSI色彩空间可以用一个圆锥空间模型来描述。用这种 描述HIS色彩空间的圆锥模型相当复杂,但确能把色调、亮度和色饱和度的变化情形表现得很清楚。 通常把色调和饱和度通称为色度,用来表示颜色的类别与深浅程度。由于人的视觉对亮度的敏感 程度远强于对颜色浓淡的敏感程度,为了便于色彩处理和识别,人的视觉系统经常采用HSI色彩空间, 它比RGB色彩空间更符合人的视觉特性。在图像处理和计算机视觉中大量算法都可在HSI色彩空间中 方便地使用,它们可以分开处理而且是相互独立的。因此,在HSI色彩空间可以大大简化图像分析 和处理的工作量。HSI色彩空间和RGB色彩空间只是同一物理量的不同表示法,因而它们之间存在着 转换关系。

再者模型上也有很大区别,上面介绍HSI和HSV时已经说明了,就不在继续阐述。

总结

该部分主要讲解彩色空间互转,彩色空间互转是传统图像算法的一个关键技术,学习颜色转换有助于我们理解图像的色域,从而为我们从事CV相关工程技术和科学研究提供一些基础、灵感和思路。

参考博客:
https://blog.csdn.net/weixin_40647819/article/details/92596879
https://blog.csdn.net/weixin_40647819/article/details/92660320

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值