2015-01-14 4 views
4

У меня есть программа, которая соответствует признакам, найденным в шаблоне, изображениям, отображаемым в видеоролике. Когда я запускаю программу, я получаю следующее сообщение об ошибке:OpenCV - совпадение с ошибкой времени выполнения SURF

OpenCV Error: Assertion failed (i1 >= 0 && i1 < static_cast<int>(keypoints1.size())) in drawMatches, file bin/opencv-2.4.7/modules/features2d/src/draw.cpp, line 207 
terminate called after throwing an instance of 'cv::Exception' 
    what(): bin/opencv-2.4.7/modules/features2d/src/draw.cpp:207: error: (-215) i1 >= 0 && i1 < static_cast<int>(keypoints1.size()) in function drawMatches 

Aborted 

Это функция drawMatches, описанная выше:

drawMatches(img_1, templateKeypoints, frames, keypoints_1, good_matches, img_matches, cv::Scalar::all(-1), cv::Scalar::all(-1), std::vector<char>(), cv::DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS); 

Из того, что я прочитал, я считаю, что проблема должна сделать с если точки функции, найденные в видео, не соответствуют объектам в изображении шаблона, программа прерывается.

min_dist = 100;  
for(int i = 0; i < img_descriptors_1.rows; i++) { 
     if(matches[i].distance <= 3 * min_dist) { 
      good_matches.push_back(matches[i]); 
     } 
     } 

Я ищу видеоролик, чтобы работать постоянно, даже если совпадений нет.

EDIT:

Я заметил, если я несколько раз попытаться запустить программу, которую я иногда получить альтернативное сообщение об ошибке:

OpenCV Error: Assertion failed (npoints >= 0 && points2.checkVector(2) == npoints && points1.type() == points2.type()) in findHomography, file /home/colin/bin/opencv-2.4.7/modules/calib3d/src/fundam.cpp, line 1074 
terminate called after throwing an instance of 'cv::Exception' 
    what(): /home/colin/bin/opencv-2.4.7/modules/calib3d/src/fundam.cpp:1074: error: (-215) npoints >= 0 && points2.checkVector(2) == npoints && points1.type() == points2.type() in function findHomography 

Aborted 

ответ

2

Сразу после следующего:

extractor.compute(img_1, keypoints_1, descriptors_1); 
extractor.compute(frame, keypoints_2, descriptors_2); 

пожалуйста добавьте это:

if ((descriptors_1.empty()) || (descriptors_2.empty())) 
continue; 

Поскольку в конкретном фрейме не найдено ключевых точек, он должен перейти к следующей итерации и проверить новый кадр. Это решило мою проблему.

+0

Я уже решил проблему и придумал то же решение. Я принял ваш ответ для будущих людей с той же проблемой. – Colin747

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