【OpenCV 例程300篇】11. 图像通道的拆分(cv2.split)

文章目录:『youcans 的 OpenCV 例程300篇 - 总目录』


【OpenCV 例程300篇】11. 图像通道的拆分(cv2.split)


函数 cv2.split() 将 3 通道 BGR 彩色图像分离为 B、G、R 单通道图像。

函数说明:

cv2.split(img[, mv]) -> retval # 图像拆分为 BGR 通道

  • 函数 cv2.split() 传入一个图像数组,并将图像拆分为 B/G/R 三个通道。

参数说明:

  • img:图像数据,nparray 多维数组
  • mv:指定的分拆通道(可选)

注意事项:

  1. 对于 openCV 使用的 BGR 格式图像,返回的分拆通道的次序为 B、G、R 通道。
  2. BGR 彩色图像的数据形状为 (width, height, channels=3),返回的 B/G/R 通道的数据形状为 (width, height),不能按照 BGR 彩色图像直接显示。
  3. 如果直接用 imshow 显示返回的单通道对象,将被视为 (width, height) 形状的灰度图像显示。
  4. 如果要正确显示某一颜色分量,需要增加另外两个通道值(置 0)转换为 BGR 三通道格式,再用 imshow 才能显示为拆分通道的颜色。
  5. cv2.split() 操作复杂耗时,可以直接使用 NumPy 切片得到分离通道。

基本例程:

    # 1.19 图像拆分通道img1 = cv2.imread("../images/imgB1.jpg", flags=1)  # flags=1 读取彩色图像(BGR)cv2.imshow("BGR", img1)  # BGR 图像# BGR 通道拆分bImg, gImg, rImg = cv2.split(img1)  # 拆分为 BGR 独立通道cv2.imshow("rImg", rImg)  # 直接显示红色分量 rImg 显示为灰度图像# 将单通道扩展为三通道imgZeros = np.zeros_like(img1)  # 创建与 img1 相同形状的黑色图像imgZeros[:,:,2] = rImg  # 在黑色图像模板添加红色分量 rImgcv2.imshow("channel R", imgZeros)  # 扩展为 BGR 通道print(img1.shape, rImg.shape, imgZeros.shape)cv2.waitKey(0)cv2.destroyAllWindows()  # 释放所有窗口

本例程的运行结果如下:

(512, 512, 3) (512, 512) (512, 512, 3)

运行结果表明:

  1. 彩色图像 img1 的形状为 (512, 512, 3),拆分的 R 通道 rImg 的形状为 (512, 512)。
  2. 用 imshow 显示 rImg,将被视为 (512, 512) 形状的灰度图像显示,不能显示为红色通道。
  3. 对 rImg 增加 B、G 两个通道值(置 0)转换为 BGR格式,再用 imshow 才能显示红色通道的颜色。

在这里插入图片描述

扩展例程:
使用 NumPy 切片得到分离通道更为简便,而且运行速度比 cv2.split 更快。

    # 1.20 图像拆分通道 (Numpy切片)img1 = cv2.imread("../images/imgB1.jpg", flags=1)  # flags=1 读取彩色图像(BGR)# 获取 B 通道bImg = img1.copy()  # 获取 BGRbImg[:, :, 1] = 0  # G=0bImg[:, :, 2] = 0  # R=0# 获取 G 通道gImg = img1.copy()  # 获取 BGRgImg[:, :, 0] = 0  # B=0gImg[:, :, 2] = 0  # R=0# 获取 R 通道rImg = img1.copy()  # 获取 BGRrImg[:, :, 0] = 0  # B=0rImg[:, :, 1] = 0  # G=0# 消除 B 通道grImg = img1.copy()  # 获取 BGRgrImg[:, :, 0] = 0  # B=0plt.subplot(221), plt.title("1. B channel"), plt.axis('off')bImg = cv2.cvtColor(bImg, cv2.COLOR_BGR2RGB)  # 图片格式转换:BGR(OpenCV) -> RGB(PyQt5)plt.imshow(bImg)  # matplotlib 显示 channel Bplt.subplot(222), plt.title("2. G channel"), plt.axis('off')gImg = cv2.cvtColor(gImg, cv2.COLOR_BGR2RGB)plt.imshow(gImg)  # matplotlib 显示 channel Gplt.subplot(223), plt.title("3. R channel"), plt.axis('off')rImg = cv2.cvtColor(rImg, cv2.COLOR_BGR2RGB)plt.imshow(rImg)  # matplotlib 显示 channel Rplt.subplot(224), plt.title("4. GR channel"), plt.axis('off')grImg = cv2.cvtColor(grImg, cv2.COLOR_BGR2RGB)plt.imshow(grImg)  # matplotlib 显示 channel GRplt.show()

本例程的运行结果如下,GR channel 是消除 B通道(保留 G/R 通道的图像):

在这里插入图片描述


(本节完)


【第1章:图像的基本操作】
07. 图像的创建(np.zeros)
08. 图像的复制(np.copy)
10. 图像的拼接(np.hstack)
11. 图像通道的拆分(cv2.split)
12. 图像通道的合并(cv2.merge)

版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125112487)
Copyright 2022 youcans, XUPT
Crated:2021-11-18
欢迎关注专栏: 『youcans 的 OpenCV 例程 300 篇』

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习矩阵求导

矩阵求导好像读书的时候都没学过,因为讲矩阵的课程上不讲求导,讲求导的课又不提矩阵。如果从事机器学习方面的工作,那就一定会遇到矩阵求导的东西。维基百科上:http://en.wikipedia.org/wiki/Matrix_calculus , 根据Y与…

【OpenCV 例程300篇】12. 图像通道的合并(cv2.merge)

文章目录:『youcans 的 OpenCV 例程200篇 - 总目录』 【OpenCV 例程300篇】12. 图像通道的合并(cv2.merge) 函数 cv2.merge() 将 B、G、R 单通道合并为 3 通道 BGR 彩色图像。 函数说明: cv2.merge(mv[, dst]) -> retval # BG…

机器学习向量化练习

机器学习向量化练习 在先前的练习里面,我们已经通过对自然图像完成了一个稀疏自编码的练习。在这次我们将通过向量化来使我们运行速度更快,并且我们将把它应用到手写数字里面。 数据下载 MNIST Dataset (Training Images)MNIST Dataset (Training Labe…

【OpenCV 例程200篇】13. 图像的加法运算(cv2.add)

专栏地址:『youcans 的 OpenCV 例程 200 篇』 文章目录:『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程 200 篇】13. 图像的加法运算(cv2.add) 函数 cv2.add() 用于图像的加法运算。 函数说明: …

【OpenCV 例程200篇】14. 图像与标量相加(cv2.add)

专栏地址:『youcans 的 OpenCV 例程 200 篇』 文章目录:『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程 200 篇】14. 图像与标量相加(cv2.add) 函数 cv2.add() 用于图像的加法运算。 函数说明: …

UFLDL之Softmax回归

Softmax回归 Contents [hide]1 简介2 代价函数3 Softmax回归模型参数化的特点4 权重衰减5 Softmax回归与Logistic 回归的关系6 Softmax 回归 vs. k 个二元分类器7 中英文对照8 中文译者 简介 在本节中,我们介绍Softmax回归模型,该模型是logistic回归模…

【OpenCV 例程200篇】15. 图像的加权加法(cv2.addWeight)

专栏地址:『youcans 的 OpenCV 例程 200 篇』 文章目录:『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程 200 篇】15. 图像的加权加法(cv2.addWeight) 函数 cv2.addWeight() 用于图像的加权加法运算。 函数说…

【OpenCV 例程200篇】16. 不同尺寸的图像加法

专栏地址:『youcans 的 OpenCV 例程 200 篇』 文章目录:『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程 200 篇】16. 不同尺寸的图像加法 函数 cv2.add() 用于图像的加法运算, 对两张相同大小和类型的图像进行加法运算&…

二维数据的白化处理

二维数据的白化处理 这篇博客实现起来比较简单,首先先去下载pca_2d.zip,然后打开pca_2d.m改代码,具体代码见下面close all%%%% Step 0: Load data% We have provided the code to load data from pcaData.txt into x.% x is a 2 * 45 matri…

【youcans 的图像处理学习课】4. 图像的叠加与混合

专栏地址:『youcans 的图像处理学习课』 文章目录:『youcans 的图像处理学习课 - 总目录』 【youcans 的图像处理学习课】4. 图像的叠加与混合 文章目录【youcans 的图像处理学习课】4. 图像的叠加与混合1. 图像的加法运算基本例程:1.22 图像…

PCA白化

自然图片的PCA白化 在这个练习里面我们将实现PCA和ZCA白化。首先先下载这个文件pca_exercise.zip, 然后我们解压它,并用matlab打开它,我们只需要更改pca_gen.m.这个文件。 然后把代码改成下面这个形式 %% %% Step 0a: Load data % Here we provide th…

【OpenCV 例程200篇】17. 两张图像的渐变切换

专栏地址:『youcans 的 OpenCV 例程 200 篇』 文章目录:『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程 200 篇】17. 两张图像渐变切换 函数 cv2.addWeight() 用于图像的加权加法运算。 函数说明: cv2.addWeighted(sr…

深度网络概览

深度网络概览 Contents [hide]1 概述2 深度网络的优势3 训练深度网络的困难 3.1 数据获取问题3.2 局部极值问题3.3 梯度弥散问题 4 逐层贪婪训练方法 4.1 数据获取4.2 更好的局部极值 5 中英文对照6 中文译者 概述 在之前的章节中,你已经构建了一个包括输入层、隐…

【OpenCV 例程200篇】18. 图像的掩模加法(mask)

专栏地址:『youcans 的 OpenCV 例程 200 篇』 文章目录:『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】18. 图像的掩模加法 图像掩模(image mask),也常被写成 “图像掩膜”,是…

【OpenCV 例程200篇】19. 图像的圆形遮罩

专栏地址:『youcans 的 OpenCV 例程 200 篇』 文章目录:『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】19. 图像的圆形遮罩 图像掩模(image mask),也常被写成 “图像掩膜”,是…

【OpenCV 例程200篇】20. 图像的按位运算(cv2.bitwise)

专栏地址:『youcans 的 OpenCV 例程 200 篇』 文章目录:『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】20. 图像的按位运算 函数 cv2.bitwise 提供了图像的位运算,对图像的像素点值按位操作,快速高效…

栈式自编码算法

栈式自编码算法 Contents [hide]1 概述2 训练3 具体实例4 讨论5 中英文对照6 中文译者 概述 逐层贪婪训练法依次训练网络的每一层,进而预训练整个深度神经网络。在本节中,我们将会学习如何将自编码器“栈化”到逐层贪婪训练法中,从而预训练…

【OpenCV 例程200篇】21. 图像的叠加

『youcans 的 OpenCV 例程200篇 - 总目录』 【OpenCV 例程200篇】21. 图像的叠加 两张图像直接进行加法运算后图像的颜色会改变,通过加权加法实现图像混合后图像的透明度会改变,都不能实现图像的叠加。 实现图像的叠加,需要综合运用图像阈值…

微调多层自编码算法

微调多层自编码算法 Contents [hide]1 介绍2 一般策略3 使用反向传播法进行微调4 中英文对照5 中文译者 介绍 微调是深度学习中的常用策略,可以大幅提升一个栈式自编码神经网络的性能表现。从更高的视角来讲,微调将栈式自编码神经网络的所有层视为一个…

【OpenCV 例程200篇】22. 图像添加非中文文字(cv2.putText)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】22. 图像添加非中文文字 函数 cv2.putText() 用于在图像上绘制文本字符串,即添加文字。 OpenCV 不支持显示中文字符,使用 cv2.putText() 时添加的文本字符串不能包含中文字符…