2017-02-12

オプティカルフローのテスト オプティカルフローのテスト - Nao_uの日記 を含むブックマーク はてなブックマーク - オプティカルフローのテスト - Nao_uの日記 オプティカルフローのテスト - Nao_uの日記 のブックマークコメント

OpenCVで生成したオプティカルフローをUnityで補間してみた。

パラメータもほとんど調整せず適当なままだけど、わりとそれっぽく動いてる。オプティカルフローのテクスチャ生成自体はそこまでシビアではないのかも。

よく見ると広がる先端でブレンドの様子が見えたり、フレームの境目でフローマップの向きがずれて補間が目立つ瞬間もあるので、ここからコマを抜いたりした時にどこまで耐えられるか。

OpenCVでフローマップ生成のpythonスクリプト

import numpy as np
import cv2

def readFile(path,filename, start, end):
    
    for no in range(start, end):
        fname0 = path+filename+str(no)+".png"
        fname1 = path+filename+str(no+1)+".png"

        frame1 = cv2.imread(fname0)
        frame2 = cv2.imread(fname1)
        prev = cv2.cvtColor(frame1,cv2.COLOR_BGR2GRAY)
        next = cv2.cvtColor(frame2,cv2.COLOR_BGR2GRAY)
        flow = cv2.calcOpticalFlowFarneback(prev,next, None, 0.5, 3, 2, 3, 3, 1.1, 0)
        flow[...,0] *= 2.5
        flow[...,1] *= 2.5
        flow[...,0] += 128
        flow[...,1] += 128
        
        rgb = np.zeros_like(frame1)
        rgb[...,0] = flow[...,0]
        rgb[...,1] = flow[...,1]
        rgb[...,2] = 0
        rgb = cv2.cvtColor(rgb,cv2.COLOR_BGR2RGB)
        
        fname_save = path+"opt_"+filename+str(no)+".png"
        cv2.imwrite(fname_save, rgb )

    cv2.imshow('frame1',frame1)
    cv2.imshow('frame2',frame2)
    cv2.imshow('rgb',rgb)
    cv2.waitKey()
    
    # 作成したウィンドウを全て破棄
    cv2.destroyAllWindows()    

readFile("./Explosion0/","Exprosion0_",1,53)