パノラマ画像
【概要】
パノラマ画像は,重なりのある複数枚の画像をつなぎ合わせて,横(または縦)に広い1枚の画像にしたものである.本資料では,前準備(curl の用意とサンプル画像の取得),GUI ツール Hugin を用いた生成手順,および OpenCV を用いたプログラムによる生成手順を扱う.
【目次】
【関連する外部ページ】
【サイト内の関連情報】
第1章 前準備
curl のインストール
- Windows での curl の使用: curl は,Windows 10, 11 の標準機能にあるので,インストールの必要はない.
- Ubuntu での curl のインストール
# パッケージリストの情報を更新 sudo apt update sudo apt -y install curl
ここで説明のためにサンプルとして使用する画像
curl コマンドを用いてダウンロードできる(Web ブラウザでもダウンロードできる).下のコマンドは,作業中のディレクトリに boat1.jpg から boat6.jpg までの6枚を保存する.
curl -L https://github.com/opencv/opencv_extra/raw/4.x/testdata/stitching/boat1.jpg?raw=true -o boat1.jpg
curl -L https://github.com/opencv/opencv_extra/raw/4.x/testdata/stitching/boat2.jpg?raw=true -o boat2.jpg
curl -L https://github.com/opencv/opencv_extra/raw/4.x/testdata/stitching/boat3.jpg?raw=true -o boat3.jpg
curl -L https://github.com/opencv/opencv_extra/raw/4.x/testdata/stitching/boat4.jpg?raw=true -o boat4.jpg
curl -L https://github.com/opencv/opencv_extra/raw/4.x/testdata/stitching/boat5.jpg?raw=true -o boat5.jpg
curl -L https://github.com/opencv/opencv_extra/raw/4.x/testdata/stitching/boat6.jpg?raw=true -o boat6.jpg
第2章 複数画像からのパノラマ画像の生成ツール Hugin
Hugin は,重なりのある複数枚の写真をつなぎ合わせてパノラマ画像を作るソフトウェアである.
- Hugin のインストール
Windows の場合は, https://hugin.sourceforge.io/ からインストーラを入手する.
Ubuntu の場合は, 次のコマンドを実行する.
sudo add-apt-repository ppa:ubuntuhandbook1/apps sudo apt -y install hugin hugin-tools - Hugin を起動する
次のコマンドは,起動時に読み込む画像ファイル名を指定している(起動後に,Hugin の画面でファイルを読み込むこともできる).
hugin boat*.jpg
- 「配置」をクリックする
- 「パノラマを作成」をクリックする
その後は,画面の指示に従う.
- .tif ファイルができるので確認する
第3章 OpenCV によるパノラマ画像の生成(演習)
OpenCV には,複数枚の画像をつなぎ合わせてパノラマ画像を作る Stitcher クラスがある.第1章で取得した boat1.jpg から boat6.jpg をつなぎ合わせ,結果を result.jpg に保存する.
OpenCV のインストール
管理者権限でコマンドプロンプトを起動する
(手順:Windowsキーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。
pip install -U --no-user opencv-python numpy
プログラム
次のプログラムを実行すると,同じディレクトリにある boat1.jpg から boat6.jpg を読み込み,パノラマ画像 result.jpg を保存する.
import cv2 as cv
img_names = ["boat1.jpg", "boat2.jpg", "boat3.jpg",
"boat4.jpg", "boat5.jpg", "boat6.jpg"]
imgs = [cv.imread(name) for name in img_names]
stitcher = cv.Stitcher.create(cv.Stitcher_PANORAMA)
status, pano = stitcher.stitch(imgs)
if status != cv.Stitcher_OK:
print("Can't stitch images, error code = %d" % status)
else:
cv.imwrite("result.jpg", pano)
print("stitching completed successfully. result.jpg saved!")