Ask Your Question

Revision history [back]

OpenCV Error: Assertion failed ((npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0) in calcOpticalFlowPyrLK, file /home/jiaxw/opencv/opencv-3.1.0/modules/video/src/lkpyramid.cpp, line 1114

I want to use the calcOptialFlowPyrLK to track FAST feature points and use non-maximum suppression to select feature points. But what does it mean now? OpenCV Error: Assertion failed ((npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0) in calcOpticalFlowPyrLK, file /home/jiaxw/opencv/opencv-3.1.0/modules/video/src/lkpyramid.cpp, line 1114 terminate called after throwing an instance of 'cv::Exception' what(): /home/jiaxw/opencv/opencv-3.1.0/modules/video/src/lkpyramid.cpp:1114: error: (-215) (npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0 in function calcOpticalFlowPyrLK

Here is my code:

include <iostream>

include <fstream>

include <list>

include <vector>

include <chrono>

using namespace std;

include <opencv2 core="" core.hpp="">

include <opencv2 highgui="" highgui.hpp="">

include <opencv2 features2d="" features2d.hpp="">

include <opencv2 video="" tracking.hpp="">

void selectMax( int window, cv::Mat gray, std::vector<cv::keypoint> & kp_0){ int r = window /2; if( window != 0) {

    for( int i = 0; i < kp_0.size(); i++){
        for( int j = 0; j < kp_0.size(); j++)
        {

if( (abs(kp_0[i].pt.x - kp_0[j].pt.x) + abs(kp_0[i].pt.y - kp_0[j].pt.y) ) <= 2*r){
    if( kp_0[i].response < kp_0[j].response){
        std::vector<cv::KeyPoint>:: iterator it = kp_0.begin() + i;
        kp_0.erase(it);
        selectMax(window, gray, kp_0);
    }
    else{
        std::vector<cv::KeyPoint>::iterator it = kp_0.begin() + j;
        kp_0.erase(it);
        selectMax(window, gray, kp_0);
    }
}
        }
     }
}

}

int main( int argc, char** argv ) { if ( argc != 2 ) { cout<<"usage: useLK path_to_dataset"<<endl; return="" 1;="" }="" string="" path_to_dataset="argv[1];" string="" associate_file="path_to_dataset" +="" "="" associate.txt";<="" p="">

ifstream fin( associate_file );
if ( !fin ) 
{
    cerr<<"I cann't find associate.txt!"<<endl;
    return 1;
}

string rgb_file, depth_file, time_rgb, time_depth;
list< cv::Point2f > keypoints;      
cv::Mat color, depth, last_color;

for ( int index=0; index<800; index++ )
{
    fin>>time_rgb>>rgb_file>>time_depth>>depth_file;
    color = cv::imread( path_to_dataset+"/"+rgb_file );
    depth = cv::imread( path_to_dataset+"/"+depth_file, -1 );

    std::vector<cv::KeyPoint>  kp;
    cv::Mat gray;
    cv::cvtColor( color, gray, cv::COLOR_BGR2GRAY);
    if (index ==0 )
    {

        std::vector<cv::KeyPoint> kps;
        std::vector<cv::KeyPoint>kp_select;
        cv::Ptr<cv::FastFeatureDetector> detector = cv::FastFeatureDetector::create();
        detector->detect( color, kps );

       int window = 7;
       selectMax(window, gray, kps);
       kp_select.assign(kps.begin(), kps.end());
       for ( auto kp:kp_select )
            keypoints.push_back( kp.pt );
        last_color = color;
        continue;
    }
    if ( color.data==nullptr || depth.data==nullptr )
        continue;

    vector<cv::Point2f> next_keypoints; 
    vector<cv::Point2f> prev_keypoints;
    for ( auto kp:keypoints )
        prev_keypoints.push_back(kp);
    vector<unsigned char> status;
    vector<float> error; 
    chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
    cv::calcOpticalFlowPyrLK( last_color, color, prev_keypoints, next_keypoints, status, error );
    chrono::steady_clock::time_point t2 = chrono::steady_clock::now();
    chrono::duration<double> time_used = chrono::duration_cast<chrono::duration<double>>( t2-t1 );
    cout<<"LK Flow use time:"<<time_used.count()<<" seconds."<<endl;

    int i=0; 
    for ( auto iter=keypoints.begin(); iter!=keypoints.end(); i++)
    {
        if ( status[i] == 0 )
        {
            iter = keypoints.erase(iter);
            continue;
        }
        *iter = next_keypoints[i];
        iter++;
    }
    cout<<"tracked keypoints: "<<keypoints.size()<<endl;
    if (keypoints.size() == 0)
    {
        cout<<"all keypoints are lost."<<endl;
        break; 
    }
    cv::Mat img_show = color.clone();
    for ( auto kp:keypoints )
        cv::circle(img_show, kp, 10, cv::Scalar(0, 240, 0), 1);
    cv::imshow("corners", img_show);
    cv::waitKey(0);
    last_color = color;
}
return 0;

}

click to hide/show revision 2
None

updated 2018-11-04 01:42:42 -0600

berak gravatar image

OpenCV Error: Assertion failed ((npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0) in calcOpticalFlowPyrLK, file /home/jiaxw/opencv/opencv-3.1.0/modules/video/src/lkpyramid.cpp, line 1114

I want to use the calcOptialFlowPyrLK to track FAST feature points and use non-maximum suppression to select feature points. But what does it mean now? now?

OpenCV Error: Assertion failed ((npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0) in calcOpticalFlowPyrLK, file /home/jiaxw/opencv/opencv-3.1.0/modules/video/src/lkpyramid.cpp, line 1114
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/jiaxw/opencv/opencv-3.1.0/modules/video/src/lkpyramid.cpp:1114: error: (-215) (npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0 in function calcOpticalFlowPyrLK

calcOpticalFlowPyrLK

Here is my code:

include <iostream>

include <fstream>

include <list>

include <vector>

include <chrono>

#include <iostream>
#include <fstream>
#include <list>
#include <vector>
#include <chrono>
using namespace std; 

include <opencv2 core="" core.hpp="">

include <opencv2 highgui="" highgui.hpp="">

include <opencv2 features2d="" features2d.hpp="">

include <opencv2 video="" tracking.hpp="">

#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/features2d/features2d.hpp> #include <opencv2/video/tracking.hpp> void selectMax( int window, cv::Mat gray, std::vector<cv::keypoint> std::vector<cv::KeyPoint> & kp_0){ int r = window /2; if( window != 0) {

{
 for( int i = 0; i < kp_0.size(); i++){
 for( int j = 0; j < kp_0.size(); j++)
 {
 if( (abs(kp_0[i].pt.x - kp_0[j].pt.x) + abs(kp_0[i].pt.y - kp_0[j].pt.y) ) <= 2*r){
 if( kp_0[i].response < kp_0[j].response){
 std::vector<cv::KeyPoint>:: iterator it = kp_0.begin() + i;
 kp_0.erase(it);
  selectMax(window, gray, kp_0);
}
 }
 else{
  std::vector<cv::KeyPoint>::iterator it = kp_0.begin() + j;
 kp_0.erase(it);
  selectMax(window, gray, kp_0);
}
}
}
}
}

}

} } } } } } int main( int argc, char** argv ) { if ( argc != 2 ) { cout<<"usage: useLK path_to_dataset"<<endl; return="" 1;="" }="" string="" path_to_dataset="argv[1];" string="" associate_file="path_to_dataset" +="" "="" associate.txt";<="" p="">

path_to_dataset"<<endl;
return 1;
}
string path_to_dataset = argv[1];
string associate_file = path_to_dataset + "/associate.txt";
ifstream fin( associate_file );
 if ( !fin )
 {
  cerr<<"I cann't find associate.txt!"<<endl;
 return 1;
}
 }
string rgb_file, depth_file, time_rgb, time_depth;
 list< cv::Point2f > keypoints;
 cv::Mat color, depth, last_color;
 for ( int index=0; index<800; index++ )
 {
 fin>>time_rgb>>rgb_file>>time_depth>>depth_file;
  color = cv::imread( path_to_dataset+"/"+rgb_file );
  depth = cv::imread( path_to_dataset+"/"+depth_file, -1 );
 std::vector<cv::KeyPoint> kp;
  cv::Mat gray;
  cv::cvtColor( color, gray, cv::COLOR_BGR2GRAY);
 if (index ==0 )
 {
  std::vector<cv::KeyPoint> kps;
 std::vector<cv::KeyPoint>kp_select;
  cv::Ptr<cv::FastFeatureDetector> detector = cv::FastFeatureDetector::create();
  detector->detect( color, kps );
 int window = 7;
  selectMax(window, gray, kps);
 kp_select.assign(kps.begin(), kps.end());
  for ( auto kp:kp_select )
 keypoints.push_back( kp.pt );
 last_color = color;
 continue;
}
 }
 if ( color.data==nullptr || depth.data==nullptr )
 continue;
  vector<cv::Point2f> next_keypoints;
 vector<cv::Point2f> prev_keypoints;
  for ( auto kp:keypoints )
 prev_keypoints.push_back(kp);
  vector<unsigned char> status;
 vector<float> error;
 chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
  cv::calcOpticalFlowPyrLK( last_color, color, prev_keypoints, next_keypoints, status, error );
 chrono::steady_clock::time_point t2 = chrono::steady_clock::now();
  chrono::duration<double> time_used = chrono::duration_cast<chrono::duration<double>>( t2-t1 );
  cout<<"LK Flow use time:"<<time_used.count()<<" seconds."<<endl;
 int i=0;
  for ( auto iter=keypoints.begin(); iter!=keypoints.end(); i++)
 {
  if ( status[i] == 0 )
 {
 iter = keypoints.erase(iter);
 continue;
}
 }
 *iter = next_keypoints[i];
 iter++;
}
 }
 cout<<"tracked keypoints: "<<keypoints.size()<<endl;
  if (keypoints.size() == 0)
 {
  cout<<"all keypoints are lost."<<endl;
 break;
}
 }
 cv::Mat img_show = color.clone();
  for ( auto kp:keypoints )
  cv::circle(img_show, kp, 10, cv::Scalar(0, 240, 0), 1);
 cv::imshow("corners", img_show);
 cv::waitKey(0);
 last_color = color;
}
 }
return 0;
}

}

click to hide/show revision 3
None

updated 2018-11-04 01:44:06 -0600

berak gravatar image

OpenCV Error: Assertion failed ((npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0) in calcOpticalFlowPyrLK, file /home/jiaxw/opencv/opencv-3.1.0/modules/video/src/lkpyramid.cpp, line 1114

I want to use the calcOptialFlowPyrLK to track FAST feature points and use non-maximum suppression to select feature points. But what does it mean now?

OpenCV Error: Assertion failed ((npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0) in calcOpticalFlowPyrLK, file /home/jiaxw/opencv/opencv-3.1.0/modules/video/src/lkpyramid.cpp, line 1114
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/jiaxw/opencv/opencv-3.1.0/modules/video/src/lkpyramid.cpp:1114: error: (-215) (npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0 in function calcOpticalFlowPyrLK

Here is my code:

#include <iostream>
#include <fstream>
#include <list>
#include <vector>
#include <chrono>
using namespace std; 

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/video/tracking.hpp>

void selectMax( int window, cv::Mat gray, std::vector<cv::KeyPoint> & kp_0){
    int r = window /2;
    if( window != 0)
    {

        for( int i = 0; i < kp_0.size(); i++){
            for( int j = 0; j < kp_0.size(); j++)
            {

    if( (abs(kp_0[i].pt.x - kp_0[j].pt.x) + abs(kp_0[i].pt.y - kp_0[j].pt.y) ) <= 2*r){
        if( kp_0[i].response < kp_0[j].response){
            std::vector<cv::KeyPoint>:: iterator it = kp_0.begin() + i;
            kp_0.erase(it);
            selectMax(window, gray, kp_0);
        }
        else{
            std::vector<cv::KeyPoint>::iterator it = kp_0.begin() + j;
            kp_0.erase(it);
            selectMax(window, gray, kp_0);
        }
    }
            }
         }
    }
}

int main( int argc, char** argv )
{
    if ( argc != 2 )
    {
        cout<<"usage: useLK path_to_dataset"<<endl;
        return 1;
    }
    string path_to_dataset = argv[1];
    string associate_file = path_to_dataset + "/associate.txt";

    ifstream fin( associate_file );
    if ( !fin ) 
    {
        cerr<<"I cann't find associate.txt!"<<endl;
        return 1;
    }

    string rgb_file, depth_file, time_rgb, time_depth;
    list< cv::Point2f > keypoints;      
    cv::Mat color, depth, last_color;

    for ( int index=0; index<800; index++ )
    {
        fin>>time_rgb>>rgb_file>>time_depth>>depth_file;
        color = cv::imread( path_to_dataset+"/"+rgb_file );
        depth = cv::imread( path_to_dataset+"/"+depth_file, -1 );

        std::vector<cv::KeyPoint>  kp;
        cv::Mat gray;
        cv::cvtColor( color, gray, cv::COLOR_BGR2GRAY);
        if (index ==0 )
        {

            std::vector<cv::KeyPoint> kps;
            std::vector<cv::KeyPoint>kp_select;
            cv::Ptr<cv::FastFeatureDetector> detector = cv::FastFeatureDetector::create();
            detector->detect( color, kps );

           int window = 7;
           selectMax(window, gray, kps);
           kp_select.assign(kps.begin(), kps.end());
           for ( auto kp:kp_select )
                keypoints.push_back( kp.pt );
            last_color = color;
            continue;
        }
        if ( color.data==nullptr || depth.data==nullptr )
            continue;

        vector<cv::Point2f> next_keypoints; 
        vector<cv::Point2f> prev_keypoints;
        for ( auto kp:keypoints )
            prev_keypoints.push_back(kp);
        vector<unsigned char> status;
        vector<float> error; 
        chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
        cv::calcOpticalFlowPyrLK( last_color, color, prev_keypoints, next_keypoints, status, error );
        chrono::steady_clock::time_point t2 = chrono::steady_clock::now();
        chrono::duration<double> time_used = chrono::duration_cast<chrono::duration<double>>( t2-t1 );
        cout<<"LK Flow use time:"<<time_used.count()<<" seconds."<<endl;

        int i=0; 
        for ( auto iter=keypoints.begin(); iter!=keypoints.end(); i++)
        {
            if ( status[i] == 0 )
            {
                iter = keypoints.erase(iter);
                continue;
            }
            *iter = next_keypoints[i];
            iter++;
        }
        cout<<"tracked keypoints: "<<keypoints.size()<<endl;
        if (keypoints.size() == 0)
        {
            cout<<"all keypoints are lost."<<endl;
            break; 
        }
        cv::Mat img_show = color.clone();
        for ( auto kp:keypoints )
            cv::circle(img_show, kp, 10, cv::Scalar(0, 240, 0), 1);
        cv::imshow("corners", img_show);
        cv::waitKey(0);
        last_color = color;
    }
    return 0;
}