パノラマ画像

概要

パノラマ画像は,重なりのある複数枚の画像をつなぎ合わせて,横(または縦)に広い1枚の画像にしたものである.本資料では,前準備(curl の用意とサンプル画像の取得),GUI ツール Hugin を用いた生成手順,および OpenCV を用いたプログラムによる生成手順を扱う.

目次

関連する外部ページ

サイト内の関連情報

第1章 前準備

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 は,重なりのある複数枚の写真をつなぎ合わせてパノラマ画像を作るソフトウェアである.

  1. Hugin のインストール

    Windows の場合は, https://hugin.sourceforge.io/ からインストーラを入手する.

    Ubuntu の場合は, 次のコマンドを実行する.

    sudo add-apt-repository ppa:ubuntuhandbook1/apps
    sudo apt -y install hugin hugin-tools
    
  2. Hugin を起動する

    次のコマンドは,起動時に読み込む画像ファイル名を指定している(起動後に,Hugin の画面でファイルを読み込むこともできる).

    hugin boat*.jpg
    
  3. 「配置」をクリックする
  4. 「パノラマを作成」をクリックする

    その後は,画面の指示に従う.

  5. .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!")