2022年4月19日火曜日

【OpenCV】split/mergeによるチャンネルの分離/合成

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

コメントを投稿