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

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

什么是图像通道?

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

原图

对原图进行通道拆分,代码如下

python 复制代码
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

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

python 复制代码
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()合并通道,代码如下

python 复制代码
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()

运行效果如下

从结果中看出不同顺序的通道合并,图片的效果也会不一样

相关推荐
如若1237 分钟前
TRACER 论文解读与复现:面向 ICU 长时程患者监测的多模态 Harness 架构、时序证据建模与工具增强推理
人工智能·深度学习·计算机视觉
深蓝AI2 小时前
无头浏览器不必从 Chrome 改:Lightpanda 用 Zig 从零造,100 个页面只占 123MB 内存
人工智能·程序员
奈落244 小时前
AI辅助的另一面:从2026年国际AI安全报告的“故障”清单到国内专家的可靠性短板,自主行动的Agent为什么更难及时干预
人工智能·安全·agent·本地部署·ai 办公
火山引擎开发者社区6 小时前
eMudhra 证书失陷:容器用户最容易忽略的镜像信任链漏洞
人工智能
LabVIEW开发7 小时前
LabVIEW 机载 DIAL:每秒万次甲烷测量
人工智能·labview·labview知识·labview功能·labview程序
飞猫的边缘AI8 小时前
英特尔量子生意
人工智能·量子计算·边缘ai
深蓝AI8 小时前
桌面 Agent 缺的不是视觉:Vercel 开源 agent-desktop,用无障碍树 ref 替代截图坐标
人工智能·程序员
镜子AI8 小时前
镜子AI 技术复盘:三条自动化链路上的“停止条件“设计
运维·人工智能·自动化
向哆哆8 小时前
羊行为目标检测数据集:4类别、2,000张图像 | 目标检测
人工智能·yolo·目标检测·目标跟踪
如若1239 小时前
【论文复现】CoFailMed:从零复现医学图像分割的共享失败审计,含完整代码流程与科研绘图
人工智能·python