【Opencv3+Python3入门(5)彩色图像通道分离与合并】

首先要了解,在Opencv中的图像数据通道存储顺序是BGR而不是RGB,和我们常规的显示通道顺序正好相反,可以通过结合matplotlib进行验证,并且进而实现对图像的通道分离与合并操作。

彩色图像通道分离与合并

#5,图像通道分离与合并
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

def split_Image(image):
    plt.title("Saber")
    plt.imshow(image)
    b,g,r=cv.split(image)
    cv.imshow("b",b)
    cv.imshow("g",g)
    cv.imshow("r",r)
    return b,g,r
def merge_Image(b,g,r):
    #merge三通道拼接
    mergedImage=cv.merge([b,g,r])
    print(mergedImage.shape)
    cv.imshow("mergedImage",mergedImage)
srcImage3=cv.imread(r'F:\OutputResult\SrcImage\saber18.jpg')
cv.namedWindow("Saber",1)
cv.imshow("Saber",srcImage3)
b,g,r=split_Image(srcImage3)
merge_Image(b,g,r)
cv.waitKey(0)
cv.destroyAllWindows()

主要涉及函数:

cv.split(src):输入原图像,返回其各自的通道内对应的数组元素的值。

cv.merge(mv):要合并的矩阵的参数mv输入向量;mv中的所有矩阵必须相同尺寸和深度相同。输出通道数量将是矩阵数组中的通道总数。

程序运行结果如下:

【Opencv3+Python3入门(5)彩色图像通道分离与合并】_第1张图片

matplotlib绘图显示原图像:

可以发现通道是正好相反的。

【Opencv3+Python3入门(5)彩色图像通道分离与合并】_第2张图片

如果相对某一通道的所有像素值进行操作,直接按照数组形式赋值即可:

下面是分别对B,G,R通道的像素值赋值为0:

#图像通道像素值操作
import cv2 as cv
import numpy as np
srcImage3=cv.imread(r'F:\OutputResult\SrcImage\saber18.jpg')
#B,G,R三通道分别赋值为0:
#srcImage3[:,:,0]=0
#srcImage3[:,:,1]=0
srcImage3[:,:,2]=0
cv.namedWindow("Saber",1)
cv.imshow("Saber",srcImage3)
cv.waitKey(0)
cv.destroyAllWindows()

程序运行效果如下:

【Opencv3+Python3入门(5)彩色图像通道分离与合并】_第3张图片【Opencv3+Python3入门(5)彩色图像通道分离与合并】_第4张图片【Opencv3+Python3入门(5)彩色图像通道分离与合并】_第5张图片

 

 

你可能感兴趣的:(Opencv+Python入门)