2016-07-04 20 views
1

OpenCVs高密度オプティカルフロー関数(Farneback)の出力行列に関するもう一つの質問があります。 私は最近、これと同様の問題OpenCV高密度オプティカルフローマトリックス

What is output from OpenCV's Dense optical flow (Farneback) function? How can this be used to build an optical flow map in Python?

を求めており、それから、私は今行列に格納された値は、X及びYは、その特定のピクセルが前のフレームに対して移動した距離であることを知っています(私が間違っていれば私を修正してください)。

640x480ピクセルのビデオフィードを使用してオプティカルフローを計算しています。フローマトリックスの形状は以下の印刷結果に表示されます。npteは最初の2フレームを読み込んだ後にブレークを使用した配列の構造。

import cv2 
import numpy as np 

cap = cv2.VideoCapture("T5.avi") 

ret, frame1 = cap.read() 
prvs = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY) 

while (1): 
    ret, frame2 = cap.read() 
    next = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY) 

    flow = cv2.calcOpticalFlowFarneback(prvs, next, None, 0.5, 3, 15, 2, 5, 1.2, 0) 
    print flow.shape 
    print "Flow : : 0" 
    print flow[:][:][0] 
    print "Flow : : 1" 
    print flow[:][:][1] 
    break 

これは、次のような出力があります。私は今、今疑問に思って

(480, 640, 2) 
Flow : : 0 
[[ 0.01214151 0.22083586] 
[ 0.01184586 0.18637304] 
[ 0.01057486 0.15194368] 
..., 
[ 0.00064609 -0.00283471] 
[ 0.00046074 0.0047204 ] 
[ 0.000404 -0.00282944]] 
Flow : : 1 
[[ 0.0152726 0.35010788] 
[ 0.01538487 0.28910625] 
[ 0.01413684 0.22534071] 
..., 
[ 0.00082013 -0.00668656] 
[ 0.00060558 0.00633681] 
[ 0.00056752 -0.00331147]] 

をそれらの場所のそれぞれに格納されている2つの値が存在する理由は? XとYの2つの値が保存されていますか?おそらく最初と最後のポジション?あるいは、コンポーネントには虚数成分がありますか?

私はかなり多くの検索を行っていますが、これを説明するものは何も見つかりませんでした。

答えて

0

速い回答:すべてのピクセルについて、XY軸の変位値を取得しています。

私はあなたがここでは2つの異なるものを混合していると思う:私はあなたの最後の記事で述べたように
を、我々はここで見るように、あなたの行列の次元が(480, 640, 2)あります。フレーム内の特定のピクセル位置を表すX,Y値と、すべてのピクセル場所内のDeltaX,DeltaY変位値を混在させないでください。

たとえば、flow[20][20][:]は、位置20 x 20のピクセルを表し、実際には2つの浮動小数点値を持つポイントです。これは前にお話したDeltaX,DeltaYです。
したがって、flow[20][20][0]は実際にはピクセル20x20DeltaXであり、flow[20][20][1]は同じピクセル(20x20)のDeltaYです。

希望は今すぐです。

関連する問題