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()

运行效果如下

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

相关推荐
架构文摘JGWZ31 分钟前
Java 23 的12 个新特性!!
java·开发语言·学习
小齿轮lsl35 分钟前
PFC理论基础与Matlab仿真模型学习笔记(1)--PFC电路概述
笔记·学习·matlab
Aic山鱼1 小时前
【如何高效学习数据结构:构建编程的坚实基石】
数据结构·学习·算法
qq11561487071 小时前
Java学习第八天
学习
天玑y1 小时前
算法设计与分析(背包问题
c++·经验分享·笔记·学习·算法·leetcode·蓝桥杯
2301_789985942 小时前
Java语言程序设计基础篇_编程练习题*18.29(某个目录下的文件数目)
java·开发语言·学习
橄榄熊2 小时前
Windows电脑A远程连接电脑B
学习·kind
artificiali2 小时前
Anaconda配置pytorch的基本操作
人工智能·pytorch·python
酱香编程,风雨兼程3 小时前
深度学习——基础知识
人工智能·深度学习
web_learning_3213 小时前
source insight学习笔记
笔记·学习