博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通道拆分(cv2.split)及合并(cv2.merge)
阅读量:7199 次
发布时间:2019-06-29

本文共 1286 字,大约阅读时间需要 4 分钟。

1#通道拆分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) 结果说明,原图(彩色图像)是370690的三通道图像。而经过cv2.split之后,每个通道是370690的单通道图像。

2#通道合并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函数是合并单通道成多通道(不能合并多个多通道图像)。

原文链接:

转载地址:http://uhkum.baihongyu.com/

你可能感兴趣的文章
Powershell + Nagios 监控 VEEAM 备份状态
查看>>
布雷(扫雷游戏)
查看>>
收集整理了一些免费的区块链、以太坊技术开发相关的文件,有需要的拿去
查看>>
SKYPE原理分析
查看>>
Add Digits(leetcode258)
查看>>
6.3-全栈Java笔记:异常处理方法(上)
查看>>
Spark 性能相关参数配置详解-Storage篇
查看>>
十四,泛型(Generics)
查看>>
C3P0详细配置及其说明
查看>>
RedHat linux系统加固
查看>>
Linux下 RabbitMQ的安装与配置
查看>>
shell编程——$数字的含义
查看>>
Tomcat 安全配置与性能优化
查看>>
PHP教程:我们什么时候应该使用异常?
查看>>
我的友情链接
查看>>
搭建 vsftpd FTP服务器
查看>>
安全技术积累-搜索目标漏洞20163月
查看>>
python_day11_IO模型
查看>>
RAID1创建
查看>>
再谈可重入和线程安全
查看>>