通道拆分
通過索引拆分
可以通過如下語句分別提取B通道、G通道、R通道的值
b = cat[:,:,0]
g = cat[:,:,1]
r = cat[:,:,2]
舉例:
import cv2
import numpy as np
cat = cv2.imread('1.jpg', cv2.IMREAD_REDUCED_COLOR_4)
cv2.imshow('原圖'.encode("gbk").decode(errors="ignore"),cat)
b = cat[:,:,0]
g = cat[:,:,1]
r = cat[:,:,2]
cv2.imshow('B通道圖像'.encode("gbk").decode(errors="ignore"),b)
cv2.imshow('G通道圖像'.encode("gbk").decode(errors="ignore"),g)
cv2.imshow('R通道圖像'.encode("gbk").decode(errors="ignore"),r)
cat[:,:,0] = 0
cv2.imshow('B通道值置0後圖像'.encode("gbk").decode(errors="ignore"),cat)
cat[:,:,1] = 0
cv2.imshow('B、G通道值置0後圖像'.encode("gbk").decode(errors="ignore"),cat)
cv2.waitKey()
cv2.destroyAllWindows()
解釋:在OpenCV-Python包中,imshow函數的窗口標題是gbk編碼,而Python3默認UTF-8編碼。因而窗口標題包含中文時,會顯示亂碼。
解決這個問題,最直接就是從標題的編碼入手:
string.encode("gbk").decode(errors="ignore")
運行結果:
通過函數拆分
函數cv2.split()能夠拆分圖像通道
舉例:
import cv2
import numpy as np
cat = cv2.imread('1.jpg', cv2.IMREAD_REDUCED_COLOR_4)
b,g,r = cv2.split(cat)
cv2.imshow('B',b)
cv2.imshow('G',g)
cv2.imshow('R',r)
cv2.waitKey()
cv2.destroyAllWindows()
運行結果如下: