【Insta360 One X2】360度写真から自分を消したい【それPythonでできるよ】
                    
                    
                    
                    
                    360度カメラで撮り漏れがなくなったのは良いのですが、「写ってほしくないものも写る」という問題があります。
360度カメラレビュー:【最新】Insta360 One X2で。。。【360度カメラ】
今回、「三脚固定、360度写真(動画じゃない)、二枚撮り」という条件で自分を消すことに成功したのでやり方を書いていこうと思います。
Pythonで処理してますが、コンセプトが理解できれば他の写真編集あぷりでもできると思います。
360度カメラから自分を消す方法のコンセプト
さて、360度写真から自分を消す方法のコンセプトは下の図のようになります。
 360度写真から自分を消すコンセプト
あれ?ふにゃじゃない?
360度カメラを三脚固定し、片方のレンズの側に立って一枚、反対側に立ってもう一枚写真を撮ります。
この二枚の写真から自分の写ってない側(図の水色の部分)を合成すれば、自分の写っていない写真の完成です!
ちなみに、簡単なコンセプトなのでInsta360のチャットで聞いてみたところ
We are sorry to say no~ if you want t do that ,you may consider a third part software For photo ,you may consider PS ,for Video ,you may consider PR
と、そっけなく断られました。(Photo Shop使えとか。。。)
下準備
360度写真(二枚)を「Equirectangular」(エクイレクタングラー、正距円筒図法)形式のjpegファイルで準備する必要があります。
Insta360 One X2の場合は、アプリで写真を開いて「360度写真をエクスポート」するとこの形式でできあがります。
 360度写真のエクスポート
できあがった写真は、以下のような歪んだ写真になっています。
 正距円筒図法写真
        
あれ?ふにゃじゃない?
Insta360 One X2の場合は、左1/4と右1/4が背面レンズ、中心部分が前面レンズになっているようです。
360度写真の加工!
この記事ではPythonと2つのライブラリPillow,Pyexiv2を使いました。
Pillowは画像のコピペ用、Pyexiv2は「xmpメタデータ」という「この写真は360度写真ですよ!」と示すためのヘッダ情報を書き込むために使います。
スクリプトは以下のようになります。
from PIL import Image
import pyexiv2
def combine_360(filenames):
    #insta360 one x2でのサイズ
    INSP_WIDTH = 6080 
    INSP_HEIGHT = 3040
    image360 = [] #オリジナルイメージ保持
    xmp = [] #xmpメタデータ保持
    for f in filenames:
        image360.append(Image.open(f))
        #xmpメタデータ保持
        with pyexiv2.Image(f) as img:
            xmp.append(img.read_xmp())
    #背面レンズ画像保持
    half = [[None,None],[None,None]]
    half[0][0] =image360[0].crop((0,0,INSP_WIDTH/4,INSP_HEIGHT))
    half[0][1] =image360[0].crop((INSP_WIDTH*3/4,0,INSP_WIDTH,INSP_HEIGHT))
    half[1][0] =image360[1].crop((0,0,INSP_WIDTH/4,INSP_HEIGHT))
    half[1][1] =image360[1].crop((INSP_WIDTH*3/4,0,INSP_WIDTH,INSP_HEIGHT))
    combined_draw = [None] * 2
    for i in range(len(image360)):
        combined_draw[i] = Image.new("RGB",(INSP_WIDTH,INSP_HEIGHT))
        combined_draw[i].paste(image360[i],(0,0))
        combined_draw[i].paste(half[(i-1)*-1][0],(0,0))
        combined_draw[i].paste(half[(i-1)*-1][1],(int(INSP_WIDTH*3/4),0))
        combined_draw[i].save(filenames[i]+".jpg",quality=100, exif=image360[i].info['exif'])
        #xmpメタデータ貼り付け
        combined_image = pyexiv2.Image(filenames[i]+".jpg")
        combined_image.modify_xmp(xmp[i])
if __name__ == '__main__':
    import sys
    if(len(sys.argv) < 3):
        print("usage: command 1st.jpg 2nd.jpg")
        exit()
    sys.argv.pop(0)
    combine_360(sys.argv)
さて、合成すると
 元画像1
        
 元画像2
        
 合成画像1
        
 合成画像2
        
360度表示
それでは A-Frame – Make WebVRを使って実際に360度表示してみましょう。
前にも後ろにもふにゃが!
あ、まちがえた。てへぺろ
まとめ
二枚撮りするのがちょっと面倒ですが「自分のいない360度写真」はインスタ映えすると思います。笑
enjoy