win10+Python3.7.3+OpenCV3.4.1入门学习(二)————2.4通道操作

Python版本是Python3.7.3,OpenCV版本OpenCV.3.4.1,开发环境为PyCharm

在RGB图像中,图像是由R通道、G通道、B通道三个通道构成的。需要注意的是,在OpenCV中,通道是按照B通道→G通道→R通道的顺序存储的。
在图像处理过程中,可以根据需要对通道进行拆分和合并。下面就来介绍如何对通道进行拆分和合并。
1.1 通道拆分
针对RGB图像,可以分别拆分出其R通道、G通道、B通道。在OpenCV中,既可以通过索引的方式拆分通道,也可以通过函数的方式拆分通道。
1.通过索引拆分
通过索引的方式,可以直接将各个通道从图像内提取出来。例如,针对OpenCV内的BGR图像img,如下语句分别从中提取了B通道、G通道、R通道。

b = img[ : , : , 0 ]
g = img[ : , : , 1 ]
r = img[ : , : , 2 ]

eg1:编写程序,演示图像通道拆分及通道值改变对彩色图像的影响。
代码如下:

import cv2
lena=cv2.imread("lenacolor.png")
cv2.imshow("lena1",lena)
b=lena[:,:,0]
g=lena[:,:,1]
r=lena[:,:,2]
cv2.imshow("b",b)
cv2.imshow("g",g)
cv2.imshow("r",r)
lena[:,:,0]=0
cv2.imshow("lenab0",lena)
lena[:,:,1]=0
cv2.imshow("lenab0g0",lena)
cv2.waitKey()
cv2.destroyAllWindows()

本例实现了通道拆分和通道值改变:
● 语句b=lena[:, :,0]获取了图像img的B通道。
● 语句g=lena[:, :,0]获取了图像img的G通道。
● 语句r=lena[:, :,0]获取了图像img的R通道。
● 语句lena[:, :,0]=0将图像img的B通道值设置为0。
● 语句lena[:, :,1]=0将图像img的G通道值设置为0。
运行上述程序,得到如下图所示的结果,其中:
● 图( a )是原始图像lena。
● 图( b )是原始图像lena的B通道图像b。
● 图( c )是原始图像lena的G通道图像g。
● 图( d )是原始图像lena的R通道图像r。
● 图( e )是将图像lena中B通道值置为0后得到的图像。
● 图( f )是将图像lena中B通道值、G通道值均置为0后得到的图像。
(a)(b)
在这里插入图片描述)https:/![(d)]
(e)(f)
2.通过函数拆分
函数cv2.split()能够拆分图像的通道。例如,可以使用如下语句拆分彩色BGR图像img,得到B通道图像b、G通道图像g和R通道图像r。

b, g, r=cv2.split(img)

上述语句与如下语句是等价的:

b=cv2.split(a)[0]
g=cv2.split(a)[1]
r=cv2.split(a)[2]

eg2:编写程序,使用函数cv2.split()拆分图像通道。
代码如下:

import cv2
lena=cv2.imread("lenacolor.png")
b,g,r=cv2.split(lena)
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)
cv2.waitKey()
cv2.destroyAllWindows()

上述语句与如下语句是等价的:

    b=cv2.split(a)[0]
    g=cv2.split(a)[1]
    r=cv2.split(a)[2]

运行上述程序,得到如图2-22所示的三个通道图像,其中:
● 左图是B通道图像b。
● 中间的图是G通道图像g。
● 右图是R通道图像r。
在这里插入图片描述在这里插入图片描述在这里插入图片描述
1.2 通道合并
通道合并是通道拆分的逆过程,通过合并通道可以将三个通道的灰度图像构成一幅彩色图像。函数cv2.merge()可以实现图像通道的合并,例如有B通道图像b、G通道图像g和R通道图像r,使用函数cv2.merge()可以将这三个通道合并为一幅BGR的三通道彩色图像。其实现的语句为:

bgr=cv2.merge([b, g, r])

eg4:编写程序,演示使用函数cv2.merge()合并通道。
代码如下:

import cv2
lena=cv2.imread("lenacolor.png")
b,g,r=cv2.split(lena)
bgr=cv2.merge([b,g,r])
rgb=cv2.merge([r,g,b])
cv2.imshow("lena",lena)
cv2.imshow("bgr",bgr)
cv2.imshow("rgb",rgb)
cv2.waitKey()
cv2.destroyAllWindows()

陌上花开 21:36:11
根据题目要求,编写代码如下:

import cv2
lena=cv2.imread("lenacolor.png")
b, g, r=cv2.split(lena)
bgr=cv2.merge([b, g, r])
rgb=cv2.merge([r, g, b])
cv2.imshow("lena", lena)
cv2.imshow("bgr", bgr)
cv2.imshow("rgb", rgb)
cv2.waitKey()
cv2.destroyAllWindows()

在本例中,首先对BGR图像进行了拆分,接下来又对其进行了两种不同形式的合并。
● 语句b, g, r=cv2.split(lena)对图像lena进行拆分,得到b、g、r这三个通道。
● 语句bgr=cv2.merge([b, g, r])对通道b、g、r进行合并,合并顺序为B通道→G通道→R通道,得到图像bgr。
● 语句rgb=cv2.merge([r, g, b])对通道r、g、b进行合并,合并顺序为R通道→G通道→B通道,得到图像rgb。
运行上述程序,得到如下图所示的图像,其中:
● 左图是原始图像lena。
● 中间的图是lena图像经过通道拆分、合并后得到的BGR通道顺序的彩色图像bgr。
● 右图是lena图像经过通道拆分、合并后得到的RGB通道顺序的彩色图像rgb。
通过本例可以看出,改变通道顺序后,图像显示效果会发生变化。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值