0

Visual Studio で calcOpticalFlowPyrLK() int c++ をテストしようとしていますが、コードの作成中に問題が発生しました。FAST アルゴリズムを使用して、2 つの画像のキーポイントを取得します。私のコードの関連部分は次のとおりです。

    Mat im1, im1gray, im2, im2gray;
    vector<KeyPoint> keypoints1;
    vector<KeyPoint> keypoints2;
    im1=imread("C:\\Users\\Dániel\\Desktop\\1.png", 1);
    im2=imread("C:\\Users\\Dániel\\Desktop\\2.png", 1);
    cvtColor(im1, im1gray, CV_RGB2GRAY);
    FAST(im1gray, keypoints1, 100, true);
    cvtColor(im2, im2gray, CV_RGB2GRAY);
    FAST(im2gray, keypoints2, 100, true);
    vector<char> status;
    vector<float> error;
    calcOpticalFlowPyrLK(im1, im2, keypoints1, keypoints2, status, error, Size(20,20), 1, cvTermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, .3 ), 0, 0.0001); 

私の問題は、コードの最後のコマンドを実行しようとすると、エラー メッセージ (KLT.exe の 0x74fc4b32 で未処理の例外: Microsoft C++ 例外: cv::Exception at memory location 0x008de7ac..) が表示されることです。何が問題なのか誰か教えてもらえますか? 前もって感謝します!

4

1 に答える 1

1

calcOpticalFlowPyrLKvector<Point2f>ではなく で動作しvector<KeyPoint>ます。キーポイント配列を座標付きの配列に変換する必要があります。

vector<Point2f> pt1, pt2;
KeyPoint::convert(keypoints1, pt1);
KeyPoint::convert(keypoints2, pt2);
calcOpticalFlowPyrLK(im1, im2, pt1, pt2, status, error, Size(20,20), 1, cvTermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, .3 ), 0, 0.0001);
于 2013-10-29T05:52:43.600 に答える