opencv入门:色彩空间类型转换

色彩空间类型转换

每个色彩空间都有自己擅长的处理问题的领域,为了方便的处理某个具体的问题,就要使用色彩空间的转换。例如,进行图像的特征提取,距离计算时,通常将RGB转换成灰度色彩空间。

GRAY色彩空间

GRAY(灰度图像)通常指8位灰度图,有255个灰度级,范围是 0-255 . RGB转GRAY 公式为Gray = 0.299 · 𝑅 + 0.587 · 𝐺 + 0.114 · B . GRAY转RGB 时,R=G=B=Gray

XYZ色彩空间

这是一种更加方便计算的色彩空间。

在这里插入图片描述

YCrCb色彩空间

人眼视觉系统对颜色的敏感度要低于对亮度的敏感度。在RGB中,忽略了亮度信息。在 ycrcb中,Y表示光源亮度,色度信息保存在Cr Cb 中,Cr为红色分量信息,Cb表示蓝色分量信息。

在这里插入图片描述

HSV色彩空间

HSV 是一种面向视觉感知的颜色模型,色调(光的颜色),饱和度(颜色的深浅,与白色混合的数量),亮度(明暗程度)。色调使用色调环表示【0-360】,亮度,饱和度的范围[0-1] 。

在RGB转HSV之前,需要将RGB的值转换到 [0-1] 之间在这里插入图片描述
在这里插入图片描述
通常都是使用 cv2.cvtColor() 函数来转换,这里看看原理嘛。。。

HLS色彩空间

H色调,L光亮度/明度(不是亮度,取值也是 [0-1] ),S饱和度。

CIEL*a*b* 色彩空间

这个是均匀色彩空间,面向视觉感知的颜色模型。从视觉感知均匀的角度来讲,人所感知的两种颜色的区别程度,应该与这两种颜色在色彩空间中的距离成正比。如果人观察到的两种颜色的区别程度,与这两种颜色在该色彩空间中对应点的欧氏距离成正比,则称均匀色彩空间。

CIELab* 中 L* 表示像数亮度[0-100] ,表示纯黑到纯白。a* 表示从红色到绿色的范围[-127-127] ,b*黄色到蓝色的范围 [-127-127].

这个是在XYZ色彩空间上发展来的,所以要先转换成 XYZ。
在这里插入图片描述
呵呵,我是不会看第二遍的。。。

CIEL*u*v*色彩空间

也是均匀的颜色模型。适用于显示器显示和根据加色原理进行组合的场合。
在这里插入图片描述

Bayer 色彩空间

广泛运用在CCD CMOS相机中。。。可以从单平面R,G,B 交错表内获取彩色图像。
在这里插入图片描述
痴呆日记。。。。。

类型转换函数

使用cv2.cvtColor() 函数实现色彩空间的变换,该函数可以实现多个色彩空间之间的转换。

dst=cv2.cvtColor( src, code ,[dstCn] ) src表示原图,code是色彩空间转换码,dstCn 是目标图像的通道数,默认0,通道自动通过原图和code 获得。

code 太多了,,就贴在后面吧。。

注意:BGR与RGB 是不同的,约定,8位图像值的范围[0,255] 16位图像值[0,65535] ,浮点数图像值[0.0,1.0]。

例如,8位图中,值的范围[0,255],当色彩空间的值不在这个范围时,就要将该值映射到范围内。在HSV HLS中,色调[0,360),转到灰度时,色调就要除以2,[0,180). 在CIELab* 中,a,b通道的范围[-127,127] ,需要加上127.。由于计算中的四舍五入,转换过程并不都是精准可逆的。

import cv2
import numpy as np
img=np.random.randint(0,256,size=[2,4,3],dtype=np.uint8)
rst=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
print("img=\n",img)
print("rst=\n",rst)
print("像素点(1,0)直接计算得到的值=",
 img[1,0,0]*0.114+img[1,0,1]*0.587+img[1,0,2]*0.299)
print("像素点(1,0)使用公式 cv2.cvtColor()转换值=",rst[1,0])

img=
[[[166 97 102]
 [ 73 31 51]
 [221 94 158]
 [143 101 172]]
[[ 96 140 92]
 [ 19 156 34]
 [ 16 113 202]
 [116 236 238]]]
rst=
[[106 42 128 127]
[121 104 129 223]]
像素点(1,0)直接计算得到的值= 120.63199999999999    # 结果的一堆小数四舍五入转换到灰度图的值范围。
像素点(1,0)使用公式 cv2.cvtColor()转换值= 121

BGR图像的存储方式,感觉坐标轴 x向前,y向上,z向右。
在这里插入图片描述

lena=cv2.imread("lenacolor.png")
rgb = cv2.cvtColor(lena, cv2.COLOR_BGR2RGB)
cv2.imshow("lena",lena)
cv2.imshow("rgb",rgb)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值