2017-07-29 39 views
0

おはようございます。C#Emgu:DISOpticalFlowの使用

私はビデオ用のリアルタイムフレーム補間プログラムを作成しようとしています。 私はいつもC#で働いていたので、OpenCVをEmgu 3.2.0(最新版avaible)と併用することにしました。だから、

、ここにある:

まず、私は2枚のフレーム1とフレーム2という名前の画像、ウィッヒは明らかに私のビデオから2つのフレームですしています。

次私は今、私はそれらの2つのフレーム間の移動ベクトルを得るためにそれを使用する必要があります

を以下のように私DISOpticalFlowオブジェクトを構築します。

私はflowという名前のグレーイメージを作成し、私はDISOpticalFlowのcalcメソッドを使用します。

Aaaaand ...何もありません。何を試しても、フローは常に空です(この画面を参照:http://imgur.com/ozN0XgN

私は何が間違っているのでしょうか?

読者のみなさん、ありがとうございました。

CODE:

//My items 
Image<Bgr, Byte> frame1 = new Image<Bgr, Byte>(1280, 720); 
Image<Bgr, Byte> frame2 = new Image<Bgr, Byte>(1280, 720); 
DISOpticalFlow opticalFlowAlgorithm = new DISOpticalFlow(DISOpticalFlow.Preset.Medium); 
Image<Gray, Byte> flow= new Image<Gray, Byte>(1280, 720); 


//Get my frame from my server 
//Note : this is working without any problem, if I display those frames with CvInvoke.Imshow, everything is good 
server.waitFrame.WaitOne(); 
frame1.Bytes = server.frame1; 
server.waitFrame.WaitOne(); 
frame1.Bytes = server.frame1; 

//Now I get my optical flow : 
opticalFlowAlgorithm.Calc(frame1.Convert<Gray, byte>(), frame2.Convert<Gray, byte>(), flow); 

答えて

0

私はEmguCVの専門家ではないんだけど、私が正しく覚えていればイメージのみの整数値を格納することができます。 "flow"をImageとして定義すると、DISOpticalFlowは浮動小数点数の行列を返すため、情報が失われます。 OpenCVのC++ので

、私はその大きさと色空間への流れの方向をマッピングすることにより画像に変換よう

Mat_<Point2f> flow; 

として私フローマトリックスを宣言する。