アルファブレンドとは?
半透明化したかのように2つの画像を合成する方法です。ゲームなどでよく使われる演出手法です。タイトル画面でロゴを浮かび上がらせたり、キャラクターの半透明化などの演出で使われています。
今回は次の2つの画像を合成して下の結果画像を生成する方法について解説します。
結果画像
OpenCVでアルファブレンディング
関数の説明
cv2.addWeighted
cv2.addWeighted(img1,weight1,img2,weight2,gamma)
OpenCVでアルファブレンドを行う場合、cv2.addWeightedを利用します。 img1、img2は合成する2つの画像です。weight1、weight2は合成する2つの画像の重みです。 gammaは合成画像に足す画素値です。
cv2.addWeightedの入力画像はサイズをそろえる必要があります。2つの画像のサイズを そろえるためにimg1のサイズを取得してimg2のサイズをリサイズします。そこで用いられるのがimg.shapeメソッドとcv2.resize関数です。
img.shape
height, width, channel = img1.shape
heightが画像の高さ、widthが画像の幅を表しています。channelは画像のチャンネル数を表しています。imgがグレースケール画像の場合、チャンネル数が1、imgがBRG画像(カラー画像)の場合、チャンネル数は3です。
cv2.resize
cv2.resize(img,(width, height))
cv2.resizeは画像の大きさを調整する関数です。画像の幅と高さを使って サイズの調整をする場合、第2引数に幅と高さを渡すとできます。
resize関数では他にもリサイズ方法やサイズの指定方法を変更したりできます。さらに詳しく知りたい場合は下記の記事を参考にしてください。
サンプルコード
下記のコードを実行すると合成された画像が表示されます。
# –– coding: utf-8 ––
import cv2
img1 = cv2.imread(‘img1.jpg’)
img2 = cv2.imread(‘img2.jpg’)
img1のサイズを取得する
h, w, _ = img1.shape
img2をリサイズしてimg1の大きさに合わせる
img2 = cv2.resize(img2,(w, h))
アルファブレンドを行う
res = cv2.addWeighted(img1,0.3,img2,0.7,0)
cv2.imshow(‘result’,res)
cv2.waitKey(0)
cv2.destroyAllWindows()
コメント