Python+OpenCVでstitching パノラマ画像生成をやってみた

Python+OpenCVでstitching パノラマ画像展開をやってみた OpenCV




概要

Python+OpenCVでstitching
複数の写真をつなぎ合わせる。いわゆるパノラマ画像と呼ばれるものを作る。

OpenCVにSticherClassが用意されているので、それを利用しました。
画像を一度、読み込んで配列に格納した後、それを引数に実行しているようなので、
外向けのサービスにするのであればその点を気をつけなければならいと思われます。

sticherクラスに関しては、こちらから
High level stitching API (Stitcher class)

OpenCV: High level stitching API (Stitcher class)

ググるとスクリプトが落ちてるのでそれを使ってやってみました。

環境

Python3.6X
OpenCV3.4.X
Mac OS X

出力

実行するとこのような感じになる



↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

できらぁっ!

ソース

import argparse
import cv2

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Stitch given images.')
    parser.add_argument("inputs", metavar='input', type=str, nargs='+', help='input file')
    parser.add_argument("--output", type=str, default='a.png', help='output file (default=a.png)')
    args = parser.parse_args()

    input_images = []
    for i in args.inputs:
        image = cv2.imread(i)
        if image is None:
            print(f'Error: Unable to open file "{i}".')
            exit()
        input_images.append(image)

    if len(input_images) == 1:
        cv2.imwrite(args.output, input_images[0])
    else:
        stitcher = cv2.createStitcher(True)
        stitched = stitcher.stitch(input_images)
        cv2.imwrite(args.output, stitched[1])

呼び出す場合のコマンド例

python3 main.py --output ./dst/8.jpg ./src/IMG_1362.JPG  ./src/IMG_1363.JPG ./src/IMG_1364.JPG  ./src/IMG_1365.JPG   ./src/IMG_1366.JPG   ./src/IMG_1367.JPG

参考

OpenCV: Images stitching (stitching module)

コメント