通道分离与合并

1. 彩色图像的通道概念

在数字图像中,彩色图像通常使用 三通道 表示:

  • R(Red 红色通道):记录每个像素的红色强度。

  • G(Green 绿色通道):记录绿色强度。

  • B(Blue 蓝色通道):记录蓝色强度。

💡 在 OpenCV 中默认是 BGR 顺序

  • OpenCV 读取的彩色图像是 (高度, 宽度, 3) 的 NumPy 数组,最后一个维度存储 B、G、R 三个通道的像素值。

  • 每个通道是一个二维数组(灰度图),取值范围是 0~255(uint8 类型)。

  • 例如:

img.shape  # (480, 640, 3)

说明图片高 480 像素,宽 640 像素,有 3 个颜色通道。


2. 为什么要分离通道?

通道分离常用于:

  1. 颜色分析:单独观察红色、绿色、蓝色的分布情况。

  2. 特征提取:在计算机视觉中,可能只处理某一个颜色通道(例如检测红色物体时只用 R 通道)。

  3. 图像处理:对某个通道进行增强、滤波,再合并回去。

  4. 颜色操作:交换通道顺序、去掉某个通道等。


3. 常用函数

cv2.split(img)

  • 作用:将三通道彩色图像分离成三个单通道图像。

  • 返回值:B、G、R 三个灰度图。

  • 注意:cv2.split() 会复制数据,比直接切片略慢。

  • 示例:

b, g, r = cv2.split(img)

cv2.merge([b, g, r])

  • 作用:将单通道图像合并成多通道图像。

  • 参数:通道顺序决定最终的颜色。

  • 示例:

merged = cv2.merge([b, g, r])

💡 小技巧:可以用数组切片直接获取通道:

b = img[:, :, 0]  # 蓝色通道
g = img[:, :, 1]  # 绿色通道
r = img[:, :, 2]  # 红色通道

这种方法速度更快,因为它不会复制数据。


4. 显示通道

  • 直接显示通道:会看到灰度图,因为通道本质是强度值。

  • 彩色显示通道:需要将其他两个通道置 0,然后合并成彩色图像,才能看到真实颜色的效果。

示例:

import numpy as np

zero = np.zeros_like(b)
blue_img = cv2.merge([b, zero, zero])
green_img = cv2.merge([zero, g, zero])
red_img = cv2.merge([zero, zero, r])


5. 可能的坑

  1. 颜色顺序错误:在 OpenCV 中是 BGR,如果按 RGB 合并会导致颜色失真。

  2. 数据类型:必须保持 uint8,否则显示时可能出错。

  3. 通道尺寸不一致:合并前要确保三个通道的尺寸完全一致,否则会报错。


6. 练习任务

  1. 分离出三通道并分别显示(灰度模式)。

  2. 将蓝色通道置 0,重新合并,看看颜色变化。

  3. 交换通道顺序(如 R 和 B 对调),观察图像颜色变化。

  4. 对某个通道做增强(如增加亮度),再合并回去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值