グラフや画像をいい感じに2つに並べて一つの画像にしたいときに使えるスクリプトを作成しました。
dpiは500固定、pad_inches_centerで画像の間隔を調整できます。
目次
画像ファイルパスから読み込む方法
import cv2
import numpy as np
import matplotlib.pyplot as plt
def unify_images(image1_path,image2_path,output_name,dpi = 500,pad_ionches_center = 0.0):
image1,image2 = cv2.imread(f"{image1_path}"), cv2.imread(f"{image2_path}")
# 画像の合計幅と高さを計算
combined_width, combined_height= image1.shape[1] + image2.shape[1], max(image1.shape[0], image2.shape[0])
# キャンバスを指定したサイズで作成
canvas = np.zeros((combined_height, combined_width, 3), dtype=np.uint8)
# 1つ目の画像をキャンバスにコピー
canvas[:image1.shape[0], :image1.shape[1], :] = image1
# 2つ目の画像をキャンバスにコピー
canvas[:image2.shape[0], image1.shape[1]:, :] = image2
#画像の保存
plt.imshow(cv2.cvtColor(canvas, cv2.COLOR_BGR2RGB))
plt.axis('off')
plt.savefig(f"{output_name}.png",dpi =500, bbox_inches='tight', pad_inches=pad_ionches_center)
unify_images("im1.png","im2.png","result",pad_ionches_center=0.2)ndarrayを渡す方法
def unify_images_ndarray(image1,image2,output_name,dpi = 500,pad_ionches_center = 0.0):
# 画像の合計幅と高さを計算
combined_width, combined_height= image1.shape[1] + image2.shape[1], max(image1.shape[0], image2.shape[0])
# キャンバスを指定したサイズで作成
canvas = np.zeros((combined_height, combined_width, 3), dtype=np.uint8)
# 1つ目の画像をキャンバスにコピー
canvas[:image1.shape[0], :image1.shape[1], :] = image1
# 2つ目の画像をキャンバスにコピー
canvas[:image2.shape[0], image1.shape[1]:, :] = image2
#画像の保存
plt.imshow(cv2.cvtColor(canvas, cv2.COLOR_BGR2RGB))
plt.axis('off')
plt.savefig(f"{output_name}.png",dpi =500, bbox_inches='tight', pad_inches=pad_ionches_center)
unify_images_ndarray(cv2.imread("im1.png"),cv2.imread("im2.png"),"result2",pad_ionches_center=0.2)
実行結果


