画像処理ライブラリ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 件のコメント:
コメントを投稿