OpenCVなどで2つの画像の重ね合わせて比較したい場合、1ピクセルでも画像サイズが違うとエラーになります。
リサイズして合わせる方法がありますが、画像自体を拡大または縮小しないで重ね合わせしたい場合があります。
そこで、画像自体の拡大縮小をしないで、画像サイズをそろえるプログラムを作ることにしました。
例えば、大きいサイズの画像(画像1)と小さいサイズの画像(画像2)があり、
画像1のサイズに合わせるよう、画像2に黒い余白を追加します。
逆に、画像1のほうが小さい場合は、画像2をトリミングします。
import cv2
import numpy as np
#img_2の画像を、img_1の画像サイズに拡大縮小なしに合わせる。
#2つの画像の読み込み。
img_1=cv2.imread('img_1.jpg') #ファイル名やパスは変更してください。
img_2=cv2.imread('img_2.jpg')
#画像サイズ(縦、横)の取り込み
h_1, w_1, _=img_1.shape
h_2, w_2, _=img_2.shape
#縦、横サイズ、それぞれ大きい方を見つける
if h_1>h_2:
h_max=h_1
else:
h_max=h_2
if w_1>w_2:
w_max=w_1
else:
w_max=w_2
#画像の輝度がすべて0になっている最大サイズの真っ黒のベース画像を作る
img_zero=np.zeros((h_max, w_max, 3), dtype=np.uint8)
#黒のベース画像に、img_2を重ねる
img_zero[0:h_2,0:w_2]=img_2
#ベース画像をimg_1と同じサイズにトリミング
img_2_trim=img_zero[0:h_1, 0:w_1]
#画像の確認
cv2.imshow('img_1', img_1)
cv2.imshow('img_2', img_2)
cv2.imshow('img_2_trim', img_2_trim)
cv2.waitKey(0)
cv2.destroyAllWindows()