02 OpenCV图像通道处理

1 通道提取与合并

在数字图像处理中,图像通道是指一个图像中的颜色信息被分离为不同的颜色分量。常见的图像通道包括RGB通道、灰度通道、HSV通道等。

RGB通道是指将图像分离为红色、绿色和蓝色三个颜色通道,每个通道表示相应颜色的亮度。这种方式是最常见的方式,它对于彩色图像的处理非常重要。

灰度通道是指将图像中的颜色信息转换为灰度亮度值,用单个通道表示整幅图像。这种方式比较适用于黑白图像或者在彩色图像中只需要考虑图像的亮度信息时。

HSV通道是指将图像中的颜色信息分离为色调(H)、饱和度(S)和亮度(V)三个通道。这种方式在对颜色变化的控制上比RGB更加直观,更适用于图像处理中的颜色调整。

在图像处理中,通常使用不同的通道来处理和操作图像。例如,使用灰度通道可以使图像变得更容易处理,因为只需要考虑单个通道,而使用RGB通道可以使图像更容易在彩色显示设备上显示。在处理和分析图像时,选择适当的通道和通道组合是非常重要的,可以帮助我们更好地理解和控制图像。

1 数组形式

可以以数组的形式提取指定通道数据,也可以使用cv2的split提取指定通道数据。
通过索引的方式,可以直接将各个通道从图像内提取出来。通道的信息在每行数组的最后一列。

# 以下代码使用数组的形式对通道进行处理
import cv2  
lena = cv2.imread("lenacolor.png")  
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)  

以上代码可以分别提取出BGR三个通道的数据并作展示。需注意的是cv2的通道顺序不是我们所熟悉的RGB。

lena[:, :, 0] = 0  
cv2.imshow("lenab0", lena)  
lena[:, :, 1] = 0  
cv2.imshow("lenab0g0", lena)  
cv2.waitKey()  
cv2.destroyAllWindows()

以上代码可以实现对某一通道批量赋值,对某一通道的值赋值为0,即在某种程度上删除了这一通道。处理后的图片将发生色度上的变化。
image.png

2 split与merge形式

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

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

b=cv2.split(img)[0]
g=cv2.split(img)[1]
r=cv2.split(img)[2]

以上是使用split提取通道的两种方法。
对BGR通道处理后,为了展示图形,还需要将三个通道合并。

bgr = cv2.merge([b, g, r])  
rgb = cv2.merge([r, g, b])  
cv2.imshow("real", bgr)  
cv2.imshow("fake", rgb)

正常情况下,我们仍需按照BGR的顺序将图进行组合。但如果我们不按此顺序或引入了其他波段的数据,就产生了假图(遥感领域学生对此概念会更加熟悉)。
image.png

扫描二维码关注公众号,回复: 15462916 查看本文章

猜你喜欢

转载自blog.csdn.net/nkufang/article/details/128993656