I just compiled OpenCV 3.1.0 from source on Ubuntu 15.10. I disabled CUDA but kept everything else default.
Detected FAST features do not align with my image. Tellingly, when I rotate my camera, the keypoints move at a speed greater than the camera's rotation.
vector<KeyPoint> keypoints_1, keypoints_2;
FAST(img_1, keypoints_1, 28);
FAST(img_2, keypoints_2, 28);
Mat descriptors_1, descriptors_2;
Ptr<ORB> orb = ORB::create();
orb->compute( img_1, keypoints_1, descriptors_1 );
orb->compute( img_2, keypoints_2, descriptors_2 );
BFMatcher matcher;
vector<vector<DMatch> > knnMatches;
matcher.knnMatch(descriptors_1, descriptors_2, knnMatches, 2 );
vector< DMatch > good_matches;
for( int i = 0; i < descriptors_1.rows; i++ ) {
if( knnMatches[i][0].distance / knnMatches[i][1].distance <= 0.9 ) {
good_matches.push_back( knnMatches[i][0]);
}
}
Mat img_matches;
drawMatches( img_1, keypoints_1, img_2, keypoints_2,
good_matches, img_matches, Scalar::all(-1), Scalar::all(-1),
vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS );
imshow( "Matches", img_matches );
Really looking forward to figuring out how I managed to mess this up... thanks everyone.