OpenCV 4基础篇| OpenCV图像的拆分和合并

目录

  • 1. 通道拆分
    • 1.1 cv2.split
      • 1.1.1 语法结构
      • 1.1.2 注意事项
      • 1.1.3 代码示例
    • 1.2 NumPy切片
      • 1.2.1 代码示例
  • 2. 通道合并
    • 2.1 cv2.merge
      • 2.1.1 语法结构
      • 2.1.2 注意事项
      • 2.1.3 代码示例

1. 通道拆分

1.1 cv2.split

1.1.1 语法结构

b,g,r = cv2.split(img[, mv]) #图像拆分为 BGR 通道。
  • img:图像数据,nparray 多维数组
  • mv:指定的分拆通道(可选)
  • b,g,r :分割成三个单通道图像,分别代表蓝色、绿色和红色通道,并将它们分别赋值给b、g和r

1.1.2 注意事项

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

1.1.3 代码示例

import cv2imgFile = "img/lena.jpg"
img1 = cv2.imread(imgFile, flags=1)  # flags=1 读取彩色图像(BGR)
# 通道拆分
b,g,r=cv2.split(img1)
# 显示图像
cv2.imshow("b", b)
cv2.imshow("g", g)
cv2.imshow("r", r)cv2.waitKey(0)
cv2.destroyAllWindows()

1

1.2 NumPy切片

1.2.1 代码示例

import cv2imgFile = "img/lena.jpg"
img1 = cv2.imread(imgFile, flags=1)  # flags=1 读取彩色图像(BGR)
# 获取 B 通道
bImg = img1.copy()  # 获取 BGR
bImg[:, :, 1] = 0  # G=0
bImg[:, :, 2] = 0  # R=0# 获取 G 通道
gImg = img1.copy()  # 获取 BGR
gImg[:, :, 0] = 0  # B=0
gImg[:, :, 2] = 0  # R=0# 获取 R 通道
rImg = img1.copy()  # 获取 BGR
rImg[:, :, 0] = 0  # B=0
rImg[:, :, 1] = 0  # G=0# 显示图像
cv2.imshow("b", bImg)
cv2.imshow("g", gImg)
cv2.imshow("r", rImg)cv2.waitKey(0)
cv2.destroyAllWindows()  # 释放所有窗口

1

2. 通道合并

2.1 cv2.merge

2.1.1 语法结构

cv2.merge(mv[, dst])  #BGR 通道合并
  • mv:要合并的单通道
  • dst:通道合并的图像,nparray 多维数组

2.1.2 注意事项

  • 进行合并的 B、G、R 单通道图像分量,数据形状必须为 (width, height),而不是形状为 (width, height, channels=3) 的蓝色/绿色/红色图像。
  • 单通道图像分量的图像大小 (width, height) 必须相同才能进行合并。
  • 颜色通道要按照 B、G、R 通道次序合并,才能得到 BGR 格式的合并结果。
  • cv2.merge() 操作复杂耗时,推荐使用 NumPy 数组合并函数 np.stack() 生成合成图像。

2.1.3 代码示例

import cv2imgFile = "img/lena.jpg"
img1 = cv2.imread(imgFile, flags=1)  # flags=1 读取彩色图像(BGR)
# 通道拆分
b, g, r = cv2.split(img1)# 通道合并
rgb = cv2.merge([r, g, b])
gbr = cv2.merge([g, b, r])
brg = cv2.merge([b, r, g])# 显示图像
cv2.imshow("rgb", rgb)
cv2.imshow("gbr", gbr)
cv2.imshow("brg", brg)cv2.waitKey(0)
cv2.destroyAllWindows()  # 释放所有窗口

1

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

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

相关文章

【Simulink系列】——控制系统仿真基础

声明:本系列博客参考有关专业书籍,截图均为自己实操,仅供交流学习! 一、控制系统基本概念 这里就不再介绍类似于开环系统、闭环系统等基本概念了! 1、数学模型 控制系统的数学模型是指动态数学模型,大致…

程序员的金三银四求职宝典:如何在关键时期脱颖而出?

个人主页:17_Kevin-CSDN博客 随着春天的脚步渐近,程序员们的求职热潮也随之而来。在这个被称为“金三银四”的招聘季,如何从众多求职者中脱颖而出,成为了许多程序员关注的焦点。本文将为你提供一份全面的求职宝典,助你…

【JMeter】 二次开发插件开发 Dubbo 接口测试插件浅析

概述 在一些企业中,各类业务系统非常丰富,相互之间或对外提供很多的服务或接口这些服务或接口中,有很多是需要强契约约束的,服务的提供方、服务的使用方必须遵守相同契约这类服务最典型的就是RPC,其中应用广泛的有Dub…

Vue3中Vuex状态管理库学习笔记

1.什么是状态管理 在开发中,我们会的应用程序需要处理各种各样的数据,这些数据需要保存在我们应用程序的某个位置,对于这些数据的管理我们就称之为状态管理。 在之前我们如何管理自己的状态呢? 在Vue开发中,我们使用…

Linux设备模型(十一) - platform设备

一,platform device概述 在Linux2.6以后的设备驱动模型中,需关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候, 会寻找与之匹配的驱动;相反的,在系统每注册一个设备的时…

浅显易懂:WinForms、WPF和Electron的区别和优缺点

在开发桌面应用的时候,WinForms、WPF和Electron是绕不过去的三个技术栈,本文就详细据介绍了三者的区别和优缺点,帮助老铁们做个抉择。 一、winform wpf Electron 三者区别 WinForms、WPF和Electron是三种不同的框架和技术,用于开…

alfred自定义脚本执行报错,alfred task launch path not accessible问题解决

alfred自定义脚本执行报错,alfred task launch path not accessible 原因是mac升级后 /usr/lib/php 已经不存在了,可以改由zsh方式执行,如下图 右击打开目录 将执行脚本放入目录 code如下: <?phprequire ./Util.php; $qs $argv; $query $qs[1]; date_default_timezon…

#QT(智能家居界面-布局)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a; 水平布局&#xff0c;垂直布局&#xff0c;栅格布局&#xff08;弹簧&#xff09; 界面自动调整 3.记录 注意弹簧不是拖拽拉长&#xff0c;而是使用栅格布局 运行发现窗口放大缩小可以自动调整 如果想要重新布局&#xff0c;需…

做外贸的你是否已经习惯了习惯?

不管是好的习惯还是坏的习惯&#xff0c;一旦我们坚持下去&#xff0c;那么在之后的日子里就会形成一种自然反应&#xff0c;如果不那样做&#xff0c;就会觉得可能哪里有点不对劲或者生活缺了点啥。 就像贾玲的一次访谈的时候说到的&#xff0c;以前回到家就想躺下不动&#…

使用easyexcel填充模板数据,并导出excel

文章目录 前言一、制作模板二、前端代码三、后端代码总结 前言 导出excel功能非常场景&#xff0c;本片文章记录如何使用模板填充数据后再导出。因直接导出excel数据样式不符合要求&#xff0c;所以做了模板填充然后再导出excel。 效果如下&#xff1a; 一、制作模板 注意&a…

科普【1】:web3.0初探,不懂技术也能看懂。

Hi&#xff0c;我是贝格前端工场&#xff0c;本期来科普一下web3这个概念&#xff0c;力争讲的浅显易懂。 一、什么是web3及其特征 Web3是指第三代互联网&#xff0c;也被称为分布式互联网或区块链互联网。它是对传统互联网的一种进化和扩展&#xff0c;旨在提供更加去中心化、…

【归并排序】 详细解析 动图演示 逐图解析 洛谷P1177【模板】排序 sort【快速排序】

文章目录 归并排序1.归并排序的复杂度分析2.细节解释3.归并排序动图演示3(1) 我们的拆分过程如下↓ 4.code↓ 洛谷P1177【模板】排序数据规模与约定code&#xff08;归并排序&#xff09;↓code&#xff08;sort排序【快速排序】&#xff09; 完结撒花(&#xffe3;▽&#xff…