Python : gray画像(1ch画像)を3chへ

たまにですが、白黒に処理した画像とカラー画像を一緒に連結して

ビデオにしたい!とか合成したいということがありますが、

 

グレイ画像、cannyでのエッジ抽出した白黒画像は1chになるため、

カラー画像(3ch)とhconcatで画像を連結しようとすると、

下記みたいなエラーが出てしまいます。

f:id:Kangkang1981:20200514202554j:plain

※hconcatについては下記を参照ください

kangkang1981.hatenablog.com

この場合どうするか?となると、

簡単なのは、白黒画像を1chから3chに変更することです。

書き方としてはこれです。(numpy)を使います。

canny_3ch = np.stack((canny_gray,)*3, -1)

 

こうするとlenaさんをgray→canny→3chに変更して連結すると

f:id:Kangkang1981:20200514203007j:plain

こんな感じで、一つの画像として連結することができます。

 

プログラムは下記になります。

#opencv,nupyをインポートします。
import cv2 
import numpy as np

#画像を読み込む
frame = cv2.imread('lena.jpg')
#gray画像を作成
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
#エッジ抽出
canny_gray = cv2.Canny(gray,100,200)
#エッジ抽出の画像を3chへ
canny_3ch = np.stack((canny_gray,)*3, -1)

#横に連結します。
frame_h = cv2.hconcat([frame,canny_3ch])

#画像を書き込みます
cv2.imwrite('frame_canny.jpg',frame_h)

今までにpythonについて書いた記事はここにリンクを貼ってあります。

興味があればぜひご覧ください。