2013-04-14 3 views

ответ

23

OpenCV имеет функцию cv::findHomography, которая может использовать RANSAC, чтобы найти матрицу гомографии, относящуюся к двум изображениям. Вы можете увидеть пример этой функции в действии here.

В частности, раздел кода, который вы заинтересованы в том:

FlannBasedMatcher matcher; 
std::vector<DMatch> matches; 
matcher.match(descriptors_object, descriptors_scene, matches); 

for(int i = 0; i < good_matches.size(); i++) 
{ 
    //-- Get the keypoints from the good matches 
    obj.push_back(keypoints_object[ good_matches[i].queryIdx ].pt); 
    scene.push_back(keypoints_scene[ good_matches[i].trainIdx ].pt); 
} 

Mat H = findHomography(obj, scene, CV_RANSAC); 

Вы можете использовать функцию cv::perspectiveTransform деформировать изображения в соответствии с матрицей гомография.

Другие варианты cv::findHomography кроме CV_RANSAC являются 0, который использует каждую точку и CV_LMEDS, которая использует наименее Median метод. Более подробную информацию можно найти в документации по калибровке камеры OpenCV here.

Смежные вопросы