画像処理ライブラリOpenCVのsplit/mergeによりチャンネルの分離と合成ができる
OpenCVを使うには次のようにインポートが必要。
import cv2
使用する画像 'tulip.jpg'(幅400ピクセルx高さ267ピクセル)は以下(フリー写真素材ぱくたそより)
'tulip.jpg'
1. splitによるチャンネルの分離
BGRの3チャンネルのカラー画像をsplitで分離するとB,G,R各チャンネルに分離される。
import cv2
img = cv2.imread('tulip.jpg')
print(img.shape)
b, g, r = cv2.split(img)
print(b.shape)
実行結果
(267, 400, 3) (267, 400)
OpencCVの画僧ファイルはnumpy.ndarray形式なので、同じ操作はインデクシングでも可能。splitよりもこちらの方が速度の面で有利とされている。
import cv2
img = cv2.imread('tulip.jpg')
print(img.shape)
b = img[:, :, 0]
g = img[:, :, 1]
r = img[:, :, 2]
print(b.shape)
実行結果
(267, 400, 3) (267, 400)
2. mergeによるチャンネルの合成
splitにより分離したB,G,Rチャンネルを、R,B,Gに入れ替えてmergeにより合成する例。mergeの引数は配列なのでタプルかリストになる、つまりカッコが二重になる点に注意が必要。
import cv2
img = cv2.imread('tulip.jpg')
b, g, r = cv2.split(img)
merge = cv2.merge((r, b, g))
cv2.imwrite('merge.jpg', merge)
3. リファレンス
OpenCV > Operations on arrays > split()
OpenCV > Operations on arrays > merge()
使用したバージョン:Python 3.8.12 / OpenCV 4.5.5


0 件のコメント:
コメントを投稿