1.チャンネル分類split()
チャンネル分離はカラー画像処理に使用でき、画像オブジェクトは通常の 3 チャンネル BGR カラー画像で、分離後の 3 チャンネルは b、g、r です。
アルファチャンネル付きのBGRA 4チャンネル画像であれば、分離後のb、g、r、aとなります。]
画像が HSV 画像などの他の色空間の画像である場合、3 つの分離された画像はそれぞれ h、s、v になります。
import cv2
def show_img(win_name,img,wait_time=0,img_ratio=0.5,is_show=True):
if is_show is not True:
return
rows = img.shape[0]
cols = img.shape[1]
cv2.namedWindow(win_name, cv2.WINDOW_NORMAL )#cv2.WINDOW_AUTOSIZE)
cv2.resizeWindow(win_name,(int(cols*img_ratio),int(rows*img_ratio)))
cv2.imshow(win_name,img)
if wait_time >= 0:
cv2.waitKey(wait_time)
img = cv2.imread('..\\lena.jpg')
#img = cv2.imread('..\\opencv-logo.png',cv2.IMREAD_UNCHANGED)
if img is not None and len(img.shape)==3: #彩色图像才可以做通道分离
print('img.shape:',img.shape)
show_img('img',img,-1)
if img.shape[2] == 3: #如果是3通道,分离出3个图像实例
b,g,r = cv2.split(img)
show_img('b',b,-1)
show_img('g',g,-1)
show_img('r',r,-1)
cv2.waitKey(0)
elif img.shape[2] == 4: #如果是4通道
b,g,r,a = cv2.split(img)
show_img('b',b,-1)
show_img('g',g,-1)
show_img('r',r,-1)
show_img('a',a,-1)
cv2.waitKey(0)
2. インデックス モードのチャネル分離では
、img[:,:,0] を使用して 0 チャネルまたは b チャネルを分離するなど、numpy 配列のスライスまたはインデックス操作を使用します。img[:,:,1] は g チャネルに対応し、img[ :,: ,2] が r チャネルに対応し、img[:,:,3] がある場合はアルファ チャネルに対応します。
if img.shape[2] == 3: #如果是3通道,分离出3个图像实例
b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]
show_img('b',b,-1)
show_img('g',g,-1)
show_img('r',r,-1)
cv2.waitKey(0)
elif img.shape[2] == 4: #如果是4通道
b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]
a = img[:,:,3]
show_img('b',b,-1)
show_img('g',g,-1)
show_img('r',r,-1)
show_img('a',a,-1)
cv2.waitKey(0)
3. チャネルの結合 merge()
既存の複数のチャネル画像がタプルに構築され、merge() に渡されて、画像の結合が実現されます。
merge() のパラメータはマルチチャンネル画像で構成されるタプルです
import cv2
img = cv2.imread('lena.jpg')
b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]
img2 = cv2.merge((b,g,r)) #传入bgr构成的元组
cv2.imshow('merged',img2)
cv2.waitKey(0)
4. グレースケール画像を分離する
import cv2
img = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
print('img.shape:',img.shape)
res = cv2.split(img)
#单通道的灰度图用split()分离后,实际得到的是一个包含了array类型的list,效果和对一个numpy数组做split操作是类似的。