OpenCV开发之颜色通道的分离与合并

22人浏览 / 0人评论 / 添加收藏

在OpenCV开发中,颜色通道的分离与合并是一个很基础也很实用的技巧。简单来说,就是把一张彩色图片“拆开”成几个单色的部分,处理完后再“组装”回去。它的核心用途,就是让你能对图片中特定的颜色分量进行独立分析或增强。

核心原理:BGR色彩空间

OpenCV默认的色彩空间是BGR(蓝、绿、红)顺序,和我们通常习惯的RGB顺序不同。这张图很直观地展示了这个过程:

基础操作:cv2.split()cv2.merge()

Python的OpenCV库提供了两个主要函数来实现这一功能。

1. 通道分离:cv2.split()

split函数能将一个多通道图像(如BGR三通道)拆分成多个独立的单通道数组。需要注意的是,拆分后的单通道数据直接显示为灰度图,因为它只代表该颜色的强度。

显示分离后的通道:拆分后直接imshow会显示为灰度图。如果想看到偏蓝、偏绿或偏红的效果,可以创建一个与原图等大的全零(黑色)图像,然后将特定通道复制进去:

2. 通道合并:cv2.merge()

merge函数是split的逆操作,它将多个单通道数组合并成一个多通道图像。

 

代码演示如下:

#颜色通道的分离与合并
import cv2
import numpy as np
 
img = cv2.imread('./images/dog.png')
#如果图片太大,可以进行调节显示大小
# img = cv2.resize(img, (400, 300))
b, g, r = cv2.split(img)
print(b.shape)
print(g.shape)
print(r.shape)
b[10:100, 10:100] = 255
g[10:100, 10:100] = 255
# r[10:100, 10:100] = 255

# 合并通道
img2 = cv2.merge([b, g, r])
cv2.imshow("img", np.hstack((b, g)))
cv2.imshow("img2", np.hstack((img, img2)))
# 等待按键输入
cv2.waitKey(0)
cv2.destroyAllWindows()

显示效果如下:

全部评论