OpenCVs高密度オプティカルフロー関数(Farneback)の出力行列に関するもう一つの質問があります。 私は最近、これと同様の問題OpenCV高密度オプティカルフローマトリックス
を求めており、それから、私は今行列に格納された値は、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つの値が保存されていますか?おそらく最初と最後のポジション?あるいは、コンポーネントには虚数成分がありますか?
私はかなり多くの検索を行っていますが、これを説明するものは何も見つかりませんでした。