アルファブレンドは2つ(以上)の画像を係数を用いて合成する方法。画像処理ライブラリOpenCVのaddWeightedによるアルファブレンドおよびndarrayの和によるアルファブレンドについて説明する。
OpenCVを使うには次のようにインポートが必要。
import cv2
例に用いる画像'buiding.jpg', 'girl.jpg'(幅450x高さ300ピクセル)は以下を使用(フリー写真素材ぱくたそより)
'buiding.jpg'
'girl.jpg'
1. addWeightedによるアルファブレンド
addWeightedは2つの画像を係数をかけて合成する。合成する画像のサイズは同じでないといけない。
書式は以下。
cv.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]] ) -> dst
src1、src2が合成する2つの画像。下式のようにalphaがsrc1に対する係数、betaがsrc2に対する係数、gammaはオフセットとなる。
dst = src1*alpha + src2*beta + gamma
カラー画像のように複数のチャンネルがある場合は、各チャンネルごとに合成される。また、画素値の上限255を超えた場合は255となり飽和(白飛び)する。
alpha:0.5、beta:0.5、gamma:0として画像を合成する例
import cv2 src1 = cv2.imread('building.jpg') src2 = cv2.imread('girl.jpg') blend = cv2.addWeighted(src1, 0.5, src2, 0.5, 0) cv2.imwrite('blend.jpg', blend)
alpha:0.2、beta:0.2、gamma:150として画像を合成する例
import cv2 src1 = cv2.imread('building.jpg') src2 = cv2.imread('girl.jpg') blend = cv2.addWeighted(src1, 0.25, src2, 0.25, 150) cv2.imwrite('blend.jpg', blend)
2. ndarrayの和によるアルファブレンド
OpenCVの画像はnumpy.ndarrayなので演算による合成が可能。addWeightedのalpha:0.2、beta:0.2、gamma:150と同じ処理をする例。addWeightedと同じ結果が得られる。
import cv2 src1 = cv2.imread('building.jpg') src2 = cv2.imread('girl.jpg') blend = src1*0.25 + src2*0.25 + 150 cv2.imwrite('blend.jpg', blend)
addWeightedで合成できるのは2つの画像だがnumpy.ndarrayの演算では合成する画像の数に制限はない。
さらに3つ目の画像'mountain.jpg'を合成する例。
'mountain.jpg' (幅450x高さ300ピクセル)は以下を使用(フリー写真素材ぱくたそより)
import cv2 src1 = cv2.imread('building.jpg') src2 = cv2.imread('girl.jpg') src3 = cv2.imread('mountain.jpg') blend = src1*0.3 + src2*0.3 + src3*0.3 cv2.imwrite('blend3.jpg', blend)
3. リファレンス
OpenCV > Operations on arrays > addWeighted()
0 件のコメント:
コメントを投稿