首先要了解,在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中的所有矩陣必須相同尺寸和深度相同。輸出通道數量將是矩陣數組中的通道總數。
程序運行結果如下:
matplotlib繪圖顯示原圖像:
可以發現通道是正好相反的。
如果相對某一通道的所有像素值進行操作,直接按照數組形式賦值即可:
下面是分別對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()
程序運行效果如下: