Pythonを使った画像合成をColaboratoryで実行
Pythonプログラムを使った画像合成をColaboratoryで実行した様子の解説と、プログラミングコード、合成した画像の様子について投稿します。
この投稿ではペイントを使って画像の色を数値で確認しています。そして、その確認方法を紹介している投稿がこちら「画像合成で使う画像の色を数値で確認する方法」の投稿になります。
目次
・画像合成で使った画像と合成した画像の様子
・画像合成プログラムとその説明
画像合成で使った画像と合成した画像の様子



緑の背景にOKマークがある画像の緑色以外(手)の部分をビル風景の画像に張り付けているイメージになります。
画像合成プログラムとその説明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import cv2 import numpy as np import matplotlib.pyplot as plt back_img=cv2.imread("./drive/My Drive/ブログ_ColaboratoryでPythonの基礎/ok_green.jpg") hukei_img=cv2.imread("./drive/My Drive/ブログ_ColaboratoryでPythonの基礎/biru_03.jpg") height, width = back_img.shape[:2] print(height,width) hukei_img=cv2.resize(hukei_img,(width,height)) back_show=cv2.cvtColor(back_img, cv2.COLOR_BGR2RGB) plt.imshow(back_show) plt.show() hukei_show=cv2.cvtColor(hukei_img, cv2.COLOR_BGR2RGB) plt.imshow(hukei_show) plt.show() for x in range(height): for y in range(width): b, g, r = back_img[x, y] if (b >= 80 and b <= 130) and (g >= 200 and g <= 255) and (r >= 0 and r <= 50): continue hukei_img[x, y]=back_img[x, y] hukei_show=cv2.cvtColor(hukei_img, cv2.COLOR_BGR2RGB) plt.imshow(hukei_show) plt.show() |

画像合成プログラムの説明をします。
●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に変換します。
↓実行結果↓
