サムネがコーヒーの記事は書きかけです。

【研究用スクリプト】matplotlib, opencvで二つの画像を並べて表示する方法

グラフや画像をいい感じに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)

実行結果

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です