第四章 Opencv图像色彩空间与通道

本文介绍了色彩空间的概念,包括RGB/BGR、GRAY和HSV色彩空间,并详细讲解了如何在OpenCV中使用split()和merge()方法进行通道的拆分与合并,以及色彩空间之间的转换,如BGR到GRAY和HSV。同时,提到了Alpha通道在BGRA色彩空间中的应用。
摘要由CSDN通过智能技术生成

1.色彩空间

人眼看到不同频率的光会感受到不同的颜色,人们为了表示这些不同频率光线的色彩,就建立了各种色彩模型,这些色彩模型就称作色彩空间。

1-1.RGB/BGR色彩空间

RGB/BGR色彩空间是基于三基色的;我们一般把一张彩色图像的色彩空间默认为是RGB色彩空间,但因为Opencv拆分一张彩色图像的通道默认顺序是 B→ G→ R,所以Opencv把一张彩色图像的色彩空间默认为BGR色彩空间。

1-2.GRAY色彩空间

GRAY色彩空间通常指的是灰度图像,灰度图像的像素被划分为256个灰度级别,每个像素为其中的一个级别。(前面也讲到过)

  • BGR色彩空间转换到GRAY色彩空间:dst = cvtColor(src, code);cv:指opencv,t:transform转变的意思,Color:色彩空间的意思。

  • 参数说明:

    • dst:转换后的图像。
    • src:转换前的图像(原图像)。
    • code:色彩空间转换码。
  • 实例:

    在这里插入图片描述

    1.Opencv也提供了cv2.COLOR_GRAY2BGR(从GRAY色彩空间转换到BGR色彩空间),虽然能转(转成的是三通道),但灰度图像是无法转换成彩色图像的,因为丢失了色彩的比例。

    2.当BGR三个通道的值相等时,图像就是灰度图像,但同样,灰度图像是无法转换为彩色图像的。所以,有时候别人单通道灰度图像使用不方便时,就利用BGR色彩空间中的三通道的灰度图像。

1-3.HSV色彩空间

HSV色彩空间是基于色调(hue)、饱和度(saturation)和亮度(value)的;

色调是指光的颜色,在[0, 180]内取值,例如红橙黄绿青蓝紫等;红绿蓝色调分别为0、60、120。

饱和度是指色彩的深浅,在[0, 255]内取值;0时,图像变为灰度图像。

亮度是指光的明暗,在[0, 255]内取值;0时,图像变为纯黑色。

  • HSV色彩空间转换到BGR色彩空间:dst = cvtColor(src, code)

  • 参数说明:

    • dst:转换后的图像。
    • src:转换前的图像(原图像)。
    • code:色彩空间转换码。
  • 实例:

    在这里插入图片描述

2.通道

2-1.分通道:split()方法

1.拆BGR色彩空间图像的通道
  • 语法格式:b, g, r = cv2.split(bgr_img)

  • 参数说明:

    • b:B通道图像(像素)。
    • g:G通道图像(像素)。
    • r:R通道图像(像素)。
    • bgr_img:一张BGR色彩空间图像。
  • 实例:

    在这里插入图片描述

    会发现B、G、R三个通道显示的怎么是灰度图像呢?我看到有书上说是因为当程序执行到cv2.imshow("B", b)时,原图像B、G、R这3个通道的值都会被修改位B通道的值,即(b, b, b)。但作者个人觉得有问题,b.shape=(W, H)是个单通道图像,opencv对单通道图像默认按照灰度图像处理;当输入三通道图像即shape为(W, H, 3)时,opencv默认按照BGR图像处理。

2.拆HSV色彩空间图像的通道
    • 语法格式:h, s, v = cv2.split(hsv_img)

    • 参数说明:

      • h:h通道图像(像素)。
      • s:s通道图像(像素)。
      • v:v通道图像(像素)。
      • hsv_img:一张hsv色彩空间图像。
    • 实例:

      在这里插入图片描述

      要先将图像转换为HSV色彩空间!

2-2.并通道:merge()方法

合并通道其实就是拆分通道的逆过程

1.B、G、R 通道的合并
  • 语法格式:bgr_img = cv2.split([b, g, r])

  • 参数说明:

    • b:B通道图像(像素)。
    • g:G通道图像(像素)。
    • r:R通道图像(像素)。
    • bgr_img:合并后的一张BGR色彩空间图像。
  • 实例:

    在这里插入图片描述

    merge()合并时,也可以更换b、g、r顺序。如上图img3窗口。

2.H、S、V 通道的合并
  • 语法格式:hsv_img = cv2.split([h, s, v)

  • 参数说明:

    • h:h通道图像(像素)。
    • s:s通道图像(像素)。
    • v:v通道图像(像素)。
    • hsv_img:合并后的一张hsv色彩空间图像。
  • 实例:

    在这里插入图片描述

    要对比原图的话,要将HSV色彩空间转换为BGR色彩空间。

3.B、G、R、A 通道的合并

opencv在BGR色彩空间的基础上,又增加了一个用来设置图像透明度的A通道,即alpha通道;这就构成了BGRA色彩空间。alpha在[0, 255]内取值,0为透明,255为不透明。

  • 语法格式:bgra_img = cv2.split([b, g, r,a])

  • 参数说明:

    • b:B通道图像(像素)。
    • g:G通道图像(像素)。
    • r:R通道图像(像素)。
    • a:A通道图像(像素)。
    • bgra_img:合并后的一张BGRA色彩空间图像。
  • 实例:

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    1.由上面两图可知,只有png文件可以保存alpha通道的信息!

    2.使用BGRA色彩空间时,imshow()方法可能看不到效果,可以先保存下来再看。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZGPing@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值