opencv 基础学习08-图像通道操作

opencv 基础学习08-图像通道操作

    • 什么是图像通道?
    • 通道操作:
    • **1 通过索引拆分**
    • 2 通过opencv 函数拆分
    • 通道合并

什么是图像通道?

OpenCV的通道拆分功能可用于将多通道图像拆分成单独的通道,这在图像处理和计算机视觉任务中具有许多应用场景。以下是一些通道拆分的常见应用场景:

图像处理:在某些图像处理任务中,需要对图像的不同通道进行独立处理。例如,可以对彩色图像的RGB通道进行分别处理,如对每个通道进行直方图均衡化、对比度调整、颜色平衡等操作。

物体检测:在某些物体检测任务中,通过分析不同通道的信息可以帮助提高检测准确性。例如,在红外图像中,热点和冷点可能分别对应于不同的物体或区域。通过拆分红外图像的通道,可以分别分析不同的温度通道,从而提取更具区分度的特征。

背景建模:在背景建模中,可以使用通道拆分来分析不同通道的背景信息。例如,可以对RGB图像的各个通道进行拆分,并针对每个通道建模,以便更好地分离前景目标和背景。

颜色空间转换:通道拆分也可以用于颜色空间转换。例如,将RGB图像拆分成HSV(色调、饱和度、亮度)通道,然后可以对亮度通道进行调整或应用其他颜色空间转换算法。

图像融合:在某些情况下,需要将不同通道的图像进行融合。通过通道拆分,可以将多个单通道图像进行合并,以生成具有所需特性的合成图像。
疑问:
一张图片最多有多个少通道?最少可以有几个通道?
最常见的图像类型是RGB图像,它由红色(R)、绿色(G)和蓝色(B)三个通道组成,因此是一个三通道图像。在这种情况下,每个像素的颜色由这三个通道的强度组合而成。

除了RGB图像之外,还有其他常见的多通道图像类型。例如,RGBA图像包含红色(R)、绿色(G)、蓝色(B)和透明度(A)四个通道,透明度通道用于控制像素的不透明度。

另一方面,灰度图像是一种单通道图像,每个像素只有一个强度值,表示图像中的亮度。在灰度图像中,像素的亮度通常使用0到255之间的灰度级别表示。

总之,一张图像可以有多个通道,最常见的是RGB图像(三通道),也可以是其他类型的多通道图像。而最少的情况下,一张图像至少有一个通道,即灰度图像(单通道)。

通道操作:

在 RGB 图像中,图像是由 R 通道、G 通道、B 通道三个通道构成的。需要注意的是,在
OpenCV 中,通道是按照 B 通道→G 通道→R 通道的顺序存储的。
在图像处理过程中,可以根据需要对通道进行拆分和合并。本节就来介绍如何对通道进行拆分合并

通道拆分

针对 RGB 图像,可以分别拆分出其 R 通道、G 通道、B 通道。在 OpenCV 中,既可以通过索引的方式拆分通道,也可以通过函数的方式拆分通道

1 通过索引拆分

通过索引的方式,可以直接将各个通道从图像内提取出来。例如,针对 OpenCV 内的 BGR
图像 img,如下语句分别从中提取了 B 通道、G 通道、R 通道

b = img[ : , : , 0 ]
g = img[ : , : , 1 ]
r = img[ : , : , 2 ]

原图
在这里插入图片描述
对原图进行通道拆分,代码如下

import cv2


lena=cv2.imread("lena.png",cv2.IMREAD_COLOR,)
cv2.imshow("lena1",lena)
b=lena[:,:,0]
g=lena[:,:,1]
r=lena[:,:,2]

cv2.imshow('b', b)
cv2.imshow('g', g)
cv2.imshow('r', r)



cv2.waitKey(0)
cv2.destroyAllWindows()

运行效果如下图:

在这里插入图片描述

2 通过opencv 函数拆分

函数 cv2.split()能够拆分图像的通道。例如,可以使用如下语句拆分彩色 BGR 图像 img,
得到 B 通道图像 b、G 通道图像 g 和 R 通道图像 r。

b,g,r=cv2.split(img)
上述语句与如下语句是等价的:
b=cv2.split(a)[0]
g=cv2.split(a)[1]
r=cv2.split(a)[2]

将上面代码替换后源码如下:

import cv2
import numpy as np



lena=cv2.imread("lena.png",cv2.IMREAD_COLOR,)
cv2.imshow("lena1",lena)

b,g,r=cv2.split(lena)
cv2.imshow('b', b)
cv2.imshow('g', g)
cv2.imshow('r', r)



cv2.waitKey(0)
cv2.destroyAllWindows()

运行后发现效果跟上面是一样的。

在这里插入图片描述

通道合并

通道合并是通道拆分的逆过程,通过合并通道可以将三个通道的灰度图像构成一幅彩色图
像。函数 cv2.merge()可以实现图像通道的合并,例如有 B 通道图像 b、G 通道图像 g 和 R 通道
图像 r,使用函数 cv2.merge()可以将这三个通道合并为一幅 BGR 的三通道彩色图像。其实现的
语句为:
bgr=cv2.merge([b,g,r])

演示使用函数 cv2.merge()合并通道,代码如下

import cv2
import numpy as np



lena=cv2.imread("lena.png",cv2.IMREAD_COLOR,)

#b,g,r=cv2.split(lena)对图像 lena 进行拆分,得到 b、g、r 这三个通道
b,g,r=cv2.split(lena)
#cv2.merge([b,g,r])对图像 lena 进行合并,合并后的图像与原图像完全一致
bgr=cv2.merge([b,g,r])
#对通道 r、g、b 进行合并,合并顺序为 R 通道→G 通道→B通道,得到图像 rgb。
rgb=cv2.merge([r,g,b])

cv2.imshow("lena",lena)
cv2.imshow("bgr",bgr)
cv2.imshow("rgb",rgb)



cv2.waitKey(0)
cv2.destroyAllWindows()

运行效果如下
在这里插入图片描述
从结果中看出不同顺序的通道合并,图片的效果也会不一样

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电子锁语音芯片方案,低功耗声音提示ic,WT588F02B-8S

随着科技的不断发展,电子锁已成为现代社会中,安全性和便利性并存的必备设备。如何为电子锁行业增添智能化、人性化的功能已成为行业内的热门话题。 在这个迅速发展的市场中,深圳唯创知音推出了一款语音交互方案——WT588F02B-8S 低功耗声音提…

【云原生】Docker的初步认识,安装与基本操作

一、Docker的相关知识 Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。 Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的…

时序预测 | MATLAB实现Hamilton滤波AR时间序列预测

时序预测 | MATLAB实现Hamilton滤波AR时间序列预测 目录 时序预测 | MATLAB实现Hamilton滤波AR时间序列预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 预测在很大程度上取决于适合周期的模型和所采用的预测方法,就像它们依赖于过滤器提取的周期一样。标准 Hodrick-P…

Bard:Google AI开始支持中文对话和看图说话了

说起时下火爆的生成式AI,并不是只有ChatGPT。Bard也是一个很优秀的产品,并且刚刚发布的很多有趣的新功能。文末告诉你如何访问Bard。 Google AI在最近的更新中发布了Bard,一个新的语言模型。Bard支持多种语言,包括中文&#xff0…

华为模拟器eNSP过程中所遇问题(40错误)与解决办法

1. 版本 2.打开ensp开启AR2204,报错40 3.弹出文档,挨着试一遍先 安装eNSP的PC上是否存在名为“VirtualBox Host-Only Network”的虚拟网卡 需要启用。虚拟网卡的设置是否符合以下要求:IP地址为192.168.56.1,子网掩码为255.255.2…

LCD-STM32液晶显示中英文-(6.unicode字符集)

目录 Unicode字符集和编码 UTF-32 UTF-16 UTF-8(重点:必须掌握) BOM ANSI Unicode字符集和编码 由于各个国家或地区都根据使用自己的文字系统制定标准,同一个编码在不同的标准里表示不一样的字符,各个标准互不兼容…

诚迈科技子公司智达诚远精耕智能驾驶,为商用落地注入创新力量

近期,工业和信息化部副部长辛国斌在新闻发布会上表示,将启动智能网联汽车准入和上路通行试点,组织开展城市级“车路云一体化”示范应用,将支持L3级及更高级别的自动驾驶功能商业化应用。根据工信部最新消息,《智能网联…

<C语言> 自定义类型

1.结构体 结构体是一种用户自定义的数据类型,允许将不同类型的数据项组合在一起,形成一个更大的数据结构。结构体可以包含多个成员变量,每个成员变量可以是不同的数据类型,如整数、字符、浮点数等,甚至可以包含其他结构…

数据可视化——根据提供的数据,将数据经过处理后以折线图的形式展现

文章目录 前言处理数据获取数据筛选数据将JSON数据转换为Python数据筛选出横坐标数据和纵坐标数据 根据处理后的数据绘制折线图整体代码展示 前言 前面我们学习了如何使用 pyecharts 模块绘制简单的折线图,那么今天我将为大家分享,如何根据提供的数据将…

Python+Qt窗体或Django网页支付宝收款码-扫码付款实例

程序示例精选 PythonQt窗体或Django网页支付宝收款码-扫码付款实例 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<PythonQt窗体或Django网页支付宝收款码-扫码付款实例>>编写代…

Nautlius Chain主网正式上线,模块Layer3时代正式开启

Nautilus Chain 是在 Vitalik Buterin 提出 Layer3 理念后&#xff0c; 对 Layer3 领域的全新探索。作为行业内首个模块化 Layer3 链&#xff0c;我们正在对 Layer3 架构进行早期的定义&#xff0c;并有望进一步打破公链赛道未来长期的发展格局。 在今年年初&#xff0c;经过我…

【7天学GO】第1章 开发环境

1.1 开篇介绍(必看) A. Why choose the go language B. 学语言阶段 1.2 环境搭建前戏 A. 学习一门语言步骤 B. 编译型与解释型 1.3 mac系统Go开发环境搭建 (略) 1.4 linux系统Go开发环境搭建 (略) 1.5 windows系统Go开发环境搭建 A. 开发环境搭建 Stage 1&#xff1a…

Spring整合Junit

Spring整合Junit 在之前文章中Spring的测试方法几乎都能够看到如下的代码&#xff1a; ApplicationContext context new ClassPathXmlApplicationContext("xxx.xml"); XXX xxx context.getBean(XXX.class);它的作用是创建Spring容器&#xff0c;最终获取到对象&…

【前端知识】React 基础巩固(二十六)——Portals 的使用

React 基础巩固(二十六)——Portals 的使用 Portals 通常&#xff0c;组件会渲染到 root 节点下。可使用 Portals 将组件渲染至其他节点。 添加 id 为 more、modal 的 div 元素 <div id"root"></div> <div id"more"></div> &l…

第六章:U-Net——医学图像分割的卷积神经网络

0.摘要 大多数人都认为成功训练深度网络需要成千上万个注释训练样本。在本文中&#xff0c;我们提出了一种网络和训练策略&#xff0c;依靠强大的数据增强来更有效地利用现有的注释样本。该架构由一个收缩路径和一个对称扩展路径组成&#xff0c;收缩路径用于捕捉上下文…

如何下载SRA存放在AWS的原始数据

通常&#xff0c;我们都是利用prefetch从NCBI上获取数据&#xff0c;然后用fasterp-dump/fastq-dump 转成fastq。但遗憾的SRA的数据是原数据的有损压缩&#xff0c;比如说我19年参与发表的文章里单细胞数据上传的是3个文件&#xff0c;但是当时的faster-dump/fastq-dump只能拆出…

Qt与Web混合开发:实现双向通信

引言 在当今的软件开发中&#xff0c;将Qt和Web技术结合起来进行混合开发变得越来越流行。Qt作为强大的C框架&#xff0c;提供了丰富的图形界面和功能库&#xff0c;而Web技术则提供了灵活性和跨平台的优势。结合这两种技术&#xff0c;我们可以开发出功能强大、具有吸引力的应…

自动驾驶代客泊车AVP摄像头与ECU交互需求规范

目录 1 文档范围及控制方法... 5 1.1 目的.... 5 1.2 文档授权... 5 1.3 文档变更管理... 5 1.4 缩写.... 5 1.5 术语.... 5 2 系统组成... 6 2.1 系统框图... 6 2.2 电源供应和时序要求... 7 2.2.1 摄像头供电控制... 7 2.2.2 摄像头上电时序要求…

数据结构--图的基本操作

数据结构–图的基本操作 使用的存储模式&#xff1a; 图的基本操作&#xff1a; • Adjacent(G,x,y)&#xff1a;判断图G是否存在边<x, y>或(x, y)。 • Neighbors(G,x)&#xff1a;列出图G中与结点x邻接的边。 • InsertVertex(G,x)&#xff1a;在图G中插入顶点x。 • …

【贪心算法Part03】| 1005.K次取反后最大化的数组和、134.加油站、135.分发糖果

目录 &#x1f388;LeetCode1005.K次取反后最大化的数组和 &#x1f388;LeetCode134.加油站 &#x1f388;LeetCode135.分发糖果 &#x1f388;LeetCode1005.K次取反后最大化的数组和 链接&#xff1a;1005.K次取反后最大化的数组和 给你一个整数数组 nums 和一个整数 k…