小强学Python+OpenCV之-1.4.5通道拆分(cv2.split)及合并(cv2.merge)

ger.jpeg

本篇来看一下opencv的两个函数通道cv2.split和通道cv2.merge

通道拆分cv2.split

# 导入库
import numpy as np
import argparse
import cv2

# 构造参数解析器
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the image")
args = vars(ap.parse_args())

# 加载图像
image = cv2.imread(args["image"])

# 通道分离,注意顺序BGR不是RGB
(B, G, R) = cv2.split(image)

# 显示各个分离出的通道
cv2.imshow("Red", R)
cv2.imshow("Green", G)
cv2.imshow("Blue", B)
cv2.waitKey(0)

执行脚本,得到下面三幅图像:
蓝色通道:

image.png

绿色通道:

image.png

红色通道:

image.png

奇怪,为什么分离出的图像颜色都是灰色的呢?不应该是蓝色通道是蓝色,绿色通道是绿色,红色通道是红色吗?
原来,cv2.split函数分离出的B、G、R是单通道图像,我们可以增加下面两行代码来验证一下:

print "image shape:",image.shape
print "single channal shape:",R.shape

得到结果如下:

image shape: (370, 690, 3)
single channal shape: (370, 690)

结果说明,原图(彩色图像)是370*690的三通道图像。而经过cv2.split之后,每个通道是370*690的单通道图像。

通道合并cv2.merge

其实,我最开始想像的cv2.split图像是如下的样子:

蓝色通道(其它通道分量值为0):

image.png
绿色通道(其它通道分量值为0):

image.png
红色通道(其它通道分量值为0):

image.png

原来,上面的图像是三通道图像。只是在cv2.split分离出的图像基础上,扩展另外两个通道,但另外两个通道值为0,而得到上面的这样的图像。代码如下:

# 生成一个值为0的单通道数组
zeros = np.zeros(image.shape[:2], dtype = "uint8")

# 分别扩展B、G、R成为三通道。另外两个通道用上面的值为0的数组填充
cv2.imshow("Blue", cv2.merge([B, zeros, zeros]))
cv2.imshow("Green", cv2.merge([zeros, G, zeros]))
cv2.imshow("Red", cv2.merge([zeros, zeros, R]))
cv2.waitKey(0)

总结

cv2.split函数分离得到各个通道的灰度值(单通道图像)。cv2.merge函数是合并单通道成多通道(不能合并多个多通道图像)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值