Pythonを使った画像合成をColaboratoryで実行

Pythonプログラムを使った画像合成をColaboratoryで実行した様子の解説と、プログラミングコード、合成した画像の様子について投稿します。

この投稿ではペイントを使って画像の色を数値で確認しています。そして、その確認方法を紹介している投稿がこちら画像合成で使う画像の色を数値で確認する方法の投稿になります。

目次

・画像合成で使った画像と合成した画像の様子

・画像合成プログラムとその説明


画像合成で使った画像と合成した画像の様子

緑の背景にOKマークがある画像の緑色以外(手)の部分をビル風景の画像に張り付けているイメージになります。

画像合成プログラムとその説明

画像合成プログラムの説明をします。

●back_imgには緑の背景にOKマークがある画像データが入ります。
●hukei_imgにはビル風景の画像データが入ります。

まず、cv2.imreadで画像を読み込むためにドライブをマウントします。そして、画像を読み込んだらback_img.shape[:2]で画像の高さと幅のサイズにあたるデータを取り出し、変数height,widthに代入しています。

そして、OKマークの画像とビル風景の画像の大きさを同じにするために、cv2.resizeで大きさを揃えます。揃えた後はcv2.cvtColorでBGRからRGBに変換してplt.imshowで2つの画像を表示しています。

画像を表示したら、緑の背景にOKマークがある画像の中から、背景の緑色がどこにあるのかを調べるために、変数height,widthをfor文の繰り返す回数にあてはめて調べていきます。それから、背景の緑色かどうかを調べるif文で使うために、23行目のb, g, r = back_img[x, y]で画像の色BGR(青、緑、赤)数値(0~255)で取り出しています。

次に、25行目のif文でビル風景の画像に緑の背景が合成されないように、取り出した数値の中で背景の緑色の部分になればcontinueで下のプログラムにいかないようにします。

背景の緑色以外(手)の場合はhukei_img[x, y]=back_img[x, y]でビル風景に手の部分を代入して、合成しています。画像の縦、横のサイズ分for文の繰り返しが終了したら、cv2.cvtColorでBGRからRGBに変換してplt.imshowで合成した画像を表示しています。

※import cv2(OpenCV)のcv2.imread関数で画像を読み込むと色の順番がRGB(赤、緑、青)ではなくBGR(青、緑、赤)になるので、plt.imshowで表示するときはcv2.cvtColorでBGRからRGBに変換します。

↓実行結果↓