2

私は、すべてのピクセル b/n 2 フレームの速度ベクトルを抽出しようとしています。フローとして opencv 関数を使用しました。

calcOpticalFlowFarneback(Previous_Gray, Current_Gray, Optical_Flow, 0.5, 3, 15, 3, 5, 1.2, 0);

Previous_Gray = previous frame 
Current_Gray = current frame 

そして、3 番目の引数 Optical_Flow に配列が表示されますが、この配列を使用して速度ベクトルを抽出する方法がわかりません。

前もって感謝します。

ダウィット

4

3 に答える 3

2

Mat& flow: 計算されたフロー イメージ。サイズは prevImg と同じで、タイプは CV_32FC2 になります。

このタイプは、各ピクセルの動きに対して 2 つの float 変数 (推定 x と y) があることを意味します。これを試して:

Optical_Flow.at<cv::Point2f>(1023,767).x
Optical_Flow.at<cv::Point2f>(1023,767).y
于 2013-05-21T15:26:01.443 に答える
0

計算されたオプティカル フロー ベクトルを抽出するには、次の関数を使用できます。

static void writeOpticalFlowVectors(const Mat& flow){
    std::ofstream myfile;
    std::string fullPath = "opticalFlowVectors.txt";
    myfile.open (fullPath.c_str());

    for(std::size_t x = 0; x < flow.rows; ++x){
        for(std::size_t y = 0; y < flow.cols; ++y){
            myfile << flow.at<cv::Point2f>(x,y).x;
            myfile<< ", ";
            myfile<< flow.at<cv::Point2f>(x,y).y;
            myfile << "\n";     
        }
    }
    myfile.close();
}

これにより、出力マットが反復処理され、フォーム内のすべてのベクトルがx, yファイルに書き込まれtxtます。

于 2016-08-24T12:08:21.717 に答える