2009-12-10 37 views
7

問題:動画の2つのフレームを整列しようとしています。高密度オプティカルフローから速度ベクトルを抽出するには?

私は現在、関数 "cvCalcOpticalFlowLK"を使用しようとしていますが、結果は "CvArr"の形式でxとyの速度ベクトルを出力します。

私は結果を得ましたが、私はどのようにこれらのベクトル配列を使用するか分かりません。

私の質問はこれです...どのように各ピクセルの速度はわかりますか?その特定のポイントでの各ピクセル値の単なる値ですか?

注:cvCalcOpticalFlowPyrLK()などの他のオプティカルフロー関数を使用した方がはるかに簡単ですが、密なオプティカルフローが必要です。

+0

私はその結果の画像で遊んでいましたが、各ピクセル値が各ピクセルの速度を表していると仮定していますが、どの単位が正確に測定されているのでしょうか? これらの「速度値」がそのピクセルの速度にどのように対応しているかは誰にも分かりますか? フレームあたりピクセルですか?または、他の何か? 各ピクセルの値は32ビットの浮動小数点数です。 – monky822

答えて

4

私の元々の仮定は真実でした。オプティカルフロー関数からの "velx"および "vely"出力は、各ピクセル値の実際の速度です。それらを最適に抽出するために、私は生データからピクセルにアクセスし、値を取得しました。これを行うには2つの方法があります。

cvGet2D() - この方法は遅くなりますが、1ピクセルしかアクセスする必要がない場合は問題ありません。

又は

(UCHAR *)(イメージ - >画像データ+高さ*イメージ - > widthStep +幅)。

(画像がIplImageで、幅と高さがちょうど対応する幅と画像の高されます)

0

あなたは、画素毎に動きベクトルを必要とする場合は、あなたが「密なオプティカルフロー」と呼ばれるものを計算する必要があります。 openCV 2.1から、それを正確に行う関数があります:calcOpticalFlowFarneback。

は、以下のリンクを参照:

http://opencv.itseez.com/modules/video/doc/motion_analysis_and_object_tracking.html?highlight=calcopticalflowfarneback#cv2.calcOpticalFlowFarneback
0

velxおよびvelyオプティカルフローではない実際の速度です。 使用したメソッドは廃止されました。これを使用するcalcOpticalFlowFarneback()

関連する問題