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.mzph.cn/news/718848.shtml

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

相关文章

【开发工具】GIF 录屏工具推荐 ( GIF123 - 推荐使用 | GifCam | LICEcap )

文章目录 一、GIF 录屏工具推荐1、GIF123 ( 推荐使用 )2、GifCam3、LICEcap 本博客中介绍的 3 款 GIF 录屏工具下载地址 : https://download.csdn.net/download/han1202012/88905642 也可以到对应的官网独立下载 : GIF123 : https://gif123.aardio.com/ ;GifCam : https://bl…

FAST-LIO系列-阅读笔记

近期,阅读了FAST-LIO、FAST-LIO2以及Faster_LIO论文,这三篇论文都属于滤波器的SLAM算法,下面记录一下三个工作的主要贡献和不同。 FAST-LIO 1.提出了一种计算效率高、鲁棒性强的激光雷达-惯性里程测量框架。使用紧密耦合的迭代扩展卡尔曼滤…

报错:/bin/sh: warning: setlocale: LC_ALL: cannot change locale (zh_CN.UTF-8)

解释:这是shell 警告你无法将当前的区域设置(locale)更改为 zh_CN.UTF-8,这个警告可能不会影响 fc-cache 命令的实际运行,但它确实表明系统在某些方面可能无法正确地处理与 zh_CN.UTF-8 相关的内容。 1.检查当前的区域…

2024年口腔护理市场行业未来前景预测:正畸护理用品市场行业分析报告

口腔护理是维护口腔健康的重要步骤,近年来,随着大众口腔健康意识的不断增强,人们对于口腔护理的消费意愿也不断增加,由此,口腔护理市场的市场规模也比较大。 根据鲸参谋电商数据分析平台的相关数据显示,20…

OSCP靶场--Walla

OSCP靶场–Walla 考点(1.hydra http基本认证爆破: 2.sudo -l:python导入外部模块提权 3.Linux内核提权:cve-2021-4034) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC -p- 192.168.181.97 --min-rate 2000 Starting N…

RT-DETR算法优化改进: 特征融合涨点篇 | 广义高效层聚合网络(GELAN) | YOLOv9

💡💡💡本文独家改进:即结合用梯度路径规划(CSPNet)和(ELAN)设计了一种广义的高效层聚合网络(GELAN),高效结合RT-DETR,实现涨点。 💡💡💡在多个私有数据集和公开数据集VisDrone2019、PASCAL VOC实现涨点 RT-DETR魔术师专栏介绍: https://blog.csdn.net/…

使用postman测试若依登录接口API-2

请求方式 由于登录控制器可知:该请求方式为Post请求 请求地址 在请求路径栏输入请求地址,如下图所示: 参数体 在Body键入所需参数,类型选择raw,数据格式选择"JSON":如下图所示: 认证成功与失败…

香杆箐骑行记,春回大地

2024年3月2日春回大地之际我们校长骑行群再次踏上征程前往香杆箐。这次骑行不仅是一次对身体的锻炼更是一次心灵的洗礼。 清晨的阳光洒满大地我们从郊野公园后门出发踏上了前往香杆箐的道路。沿途的风景如画绿树成荫鲜花盛开让人心旷神怡。我们沿着山路蜿蜒前行感受着大自然的韵…

正则表达式-分组

1、oracle-正则表达式:将09/29/2008 用正则表达式转换成2008-09-29 select regexp_replace(09/29/2008, ^([0-9]{2})/([0-9]{2})/([0-9]{4})$, \3-\1-\2) replace from dual; 解析:regexp_replace-替换, 第一个参数:需要进行处…

Golang Copy()方法学习

前言 主要是涉及到深浅拷贝相关的,但是在看的一个资料过程中发现他有错…并且一系列,复制粘贴他的,也都错了。 错误文章指路 很显然,Copy是深拷贝啊!!! Copy功能 copy的代码很少&#xff0c…

玩转地下管网三维建模:MagicPipe3D系统

地下管网是保障城市运行的基础设施和“生命线”。随着实景三维中国建设的推进,构建地下管网三维模型与地上融合的数字孪生场景,对于提升智慧城市管理至关重要!针对现有三维管线建模数据差异大、建模交互弱、模型效果差、缺乏语义信息等缺陷&a…

Bert Encoder和Transformer Encoder有什么不同

前言:本篇文章主要从代码实现角度研究 Bert Encoder和Transformer Encoder 有什么不同?应该可以帮助你: 深入了解Bert Encoder 的结构实现深入了解Transformer Encoder的结构实现 本篇文章不涉及对注意力机制实现的代码研究。 注:…

详解:npm升级到pnpm对比优化点!!

npm3之前 依赖树层级过深,导致依赖路径过长并且相同依赖模块会被重复安装,占用电脑磁盘空间 npm3之后 修改为扁平化处理 算法复杂存在多项目间依赖相同副本的情况导致没有明确被依赖的包也可以直接引用,管理复杂 pnpm node_modules改成非扁平化结构&a…

微软37页论文逆向工程Sora,得到了哪些结论?

一篇论文回顾 Sora 文生视频技术的背景、技术和应用。 追赶 Sora,成为了很多科技公司当下阶段的新目标。研究者们好奇的是:Sora 是如何被 OpenAI 发掘出来的?未来又有哪些演进和应用方向? Sora 的技术报告披露了一些技术细节&…

找专业人士编辑百度百科,避免审核问题

对于想在百度百科上创建词条或修改现有词条的网友,可能会有一些疑问,比如找第三方代不通过审核创建百度百科。那么,创建百度百科需要多少钱呢?让我们仔细看看。 百度百科创建服务一直存在。为了节省时间,很多人选择专业…

java八股文复习-----2024/03/03

1.接口和抽象类的区别 相似点: (1)接口和抽象类都不能被实例化 (2)实现接口或继承抽象类的普通子类都必须实现这些抽象方法 不同点: (1)抽象类可以包含普通方法和代码块&#x…

【JavaEE进阶】使用云服务器实现Linux环境搭建

文章目录 🍃前言🌲Linux背景知识🚩Linux 是什么?🚩Linux发行版🚩Linux的优势 🎄Linux环境搭建🚩环境的搭建方式🚩使用云服务器 🎋使用终端软件连接到Linux&am…

【Python】进阶学习:pandas--read_csv()用法详解

🚀【Python】进阶学习:pandas–read_csv()用法详解🚀 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教…

如何自学python

Python是一种高级编程语言,它具有简单易学、可读性强、可移植性好、功能丰富等优点,因此在许多领域都被广泛使用,如科学计算、数据分析、人工智能、Web开发、游戏开发等等。 Python具有丰富的标准库和第三方库,可以帮助程序员快速开发功能强大的应用程序。同时,Python也具…

如何做代币分析:以 LEO 币为例

作者: lesleyfootprint.network 编译:cicifootprint.network 数据源:LEO 代币仪表板 (仅包括以太坊数据) 在加密货币和数字资产领域,代币分析起着至关重要的作用。代币分析指的是深入研究与代币相关的数…