2015-01-17 3 views
0

Я хотел бы показать в консоли соответствующий размер и угол KeyPoints. Я знаю, как его обнаружить, но я не знаю, что такое индекс, который нужно показать. Я хочу получить результат, например keypoints1.size и keypoints1.angle аналогичен keypoints2.size и keypoints2.angle. Ниже я получил начало программы:Как показать соответствующие ключевые точки?

SurfFeatureDetector detector(400); 
vector<KeyPoint> keypoints1, keypoints2; 
detector.detect(img1,keypoints1); 
detector.detect(img2,keypoints2); 

SurfDescriptorExtractor extractor; 
Mat descriptors1, descriptors2; 
extractor.compute(img1,keypoints1,descriptors1); 
extractor.compute(img2,keypoints2,descriptors2); 

BruteForceMatcher<L2<float> > matcher; 
vector<DMatch> matches; 
matcher.match(descriptors1, descriptors2, matches); 
+0

opencv3.0 имеет метод «drawMatches», который рисует оба изображения, с линиями, соединяющими соответствующие соответствия. – berak

ответ

0

Вы можете сделать:

for(auto& m : matches) { 
    cout << "Keypoints 1 angle: " << keypoints1[m.queryIdx].angle << endl; 
    cout << "Keypoints 2 angle: " << keypoints2[m.trainIdx].angle << endl; 
} 

Измените .angle свойство, чтобы показать, что вам нужно

+0

Я думал, как и вы, но когда я запускаю мой код, я получил результаты: Ключевые точки 1 Угол: 221.835 Ключевые точки 2 угол: 359.637 Ключевые точки 1 Угол: 4.20466 Ключевые точки 2 угол: 185,558 Ключевые точки 1 Угол: 358,279 Ключевые точки 2 угол: 271.689 ключевых точек 1 angle: 3.03997 Keypoints 2 angle: 98.3456, и я думаю, что я должен получать очень близко к цифрам? – user1666649

+0

нет, потому что вы можете иметь выбросы, а объект в изображении запроса может вращаться – dynamic

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