今回はカラー画像をRGBに分離したり、分離した画像を結合させたりしてみたいと思います!!
■前回のおさらい
前回、画像に対するヒストグラムを作成しました。
elsammit-beginnerblg.hatenablog.com
その際、こちらのコードで一応RGBには分離しております。
b, g, r = img_bgr[:,:,0], img_bgr[:,:,1], img_bgr[:,:,2]
ただし、こちらの分離したデータをそのままimshowや画像として保存してみるとこちらのように、
それぞれグレースケールとなります。
【元画像】
【R成分】
【G成分】
【B成分】
これは、RGB成分の分離時にR、G、Bの濃淡のみの配列になってしまっているためです。
すなわち、
元データ:[[B成分],[G成分]、[R成分]]
から、
R成分:[R成分]
G成分:[G成分]
B成分:[B成分]
のように分離しているため、グレースケールとして表示されるわけです。
■カラー画像のRGB分離
正確にRGB画像として分離するためにはもうひと手間加える必要があります。
先ほどの通り、
R成分:[R成分]
G成分:[G成分]
B成分:[B成分]
のように分離してしまっているため、それぞれの成分に対して再度RGB成分を分離した形にする必要があります。
その方法はこちら!!
zeros = np.zeros((HEIGHT, WIDTH), img_bgr.dtype) b_img = cv2.merge((b, zeros, zeros)) g_img = cv2.merge((zeros, g, zeros)) r_img = cv2.merge((zeros, zeros, r))
cv2.mergeを用いると画像データの色成分を合成させることができるようになります。
そして合成する色成分として、
zeros = np.zeros((HEIGHT, WIDTH), img_bgr.dtype)
で文字通り0の成分を生成しRGB成分として合成させます!!
これで、
R成分:[[zero],[zero],[R成分]]
G成分:[[zero],[G成分],[zero]]
B成分:[[B成分],[zero],[zero]]
となり、分離前のデータと次元が同一になります。
では、こちらの色合成を実行後の画像を確認してみます!!
結果はこちら!!
【元画像】
【R成分】
【G成分】
【B成分】
R、G、B画像として表示・保存させることができました!!
■カラー画像のRGB合成
cv2.mergeを用いれば、こちらの通り、分離させていたRGB成分を再度合成させることができます。
b, g, r = img_bgr[:,:,0], img_bgr[:,:,1], img_bgr[:,:,2] rgb_img = cv2.merge((b_img,g_img,r_img))
実行するとこちらの通りになります。
【元画像】
【合成画像】
■最後に
今回、RGB画像分離と結合についてまとめてみました!!
これとnumpyで多次元を1次元に落とす手法を用いることで、画像データの転送に応用できそうですね!!
後で時間を見つけてやってみようかな?