画像を横に連結したい事情があり、OpenCVでできそうだなと軽く調べたら、すごく簡単にできた。
こんな画像があるとする。これらを横に繋げたい。
BCN_001.JPG
BCN_002.JPG
コードはめっちゃ単純だけどこんなんで。
opencv_horizontal_join.py
import cv2
import numpy as np
#画像読み込み
img1 = cv2.imread('BCN_001.JPG')
img2 = cv2.imread('BCN_002.JPG')
#画像を横に連結
img_h = cv2.hconcat([img1, img2])
cv2.imwrite('BCN_join.JPG', img_h)
画像を格納したディレクトリでコードを実行すると、同じディレクトリに結合された画像(BCN_join.JPG)が出力される。
BCN_join.JPG
画像はもちろん縦に連結したり、タイル状に並べることもできる。縦に結合する場合はcv2.vconcat()を使う。
それから今回はサイズが最初から揃っている前提でやっているが、異なるサイズの画像をリサイズして実行させたりもできる。詳細は参考リンクに。あとファイル名は引数で処理したいが、どうにでもなるのでまた今度。
参考
Python, OpenCVで画像を縦・横に連結 (hconcat, vconcat, np.tile)
いやはや、どうってことない処理だけどこれがやりたかったんだよ、ツールとか入れたくなかったから、簡単にできて本当によかった。(大昔にImageMagickで散々やってたけど)