У меня есть изображение, которое является изображением одного из набора объектов, и я хотел бы использовать SIFT в Open CV, чтобы выяснить, какой объект это. У меня есть этот код:
Mat pic = imread(...);
vector<KeyPoint> picKP;
Mac picDesc;
Mat obj1 = imread(...);
Mat obj2 = imread(...);
Mat obj3 = imread(...);
vector<KeyPoint> obj1KP;
vector<KeyPoint> obj2KP;
vector<KeyPoint> obj3KP;
Mat obj1Desc;
Mat obj2Desc;
Mat obj3Desc;
SIFT sifter = SIFT();
sifter.detect(pic, picKP);
sifter.detect(obj1, obj1KP);
sifter.detect(obj2, obj2KP);
sifter.detect(obj3, obj3KP);
sifter.compute(pic, picKP, picDesc);
sifter.compute(obj1, obj1KP, obj1Desc);
sifter.compute(obj2, obj2KP, obj1Desc);
sifter.compute(obj3, obj3KP, obj1Desc);
FlannBasedMatcher matcher;
vector<DMatch> matches1;
vector<DMatch> matches2;
vector<DMatch> matches3;
matcher.match(picDesc, obj1Desc, matches1);
matcher.match(picDesc, obj2Desc, matches2);
matcher.match(picDesc, obj3Desc, matches3);
Генерирует vector<DMatch>
сравнить мою фотографию с каждой потенциальной картиной. Но я не знаю, что делать с 3 vector<DMatch>
Это выяснить, какой из них лучше всего подходит.
Примечание: я делаю это в основном, чтобы попытаться узнать о SIFT, поэтому, хотя я знаю, что для моего конкретного набора данных доступны более эффективные способы, я все же хочу попробовать сделать это с SIFT.
Смотрите API для DMatch
тип данных здесь:
http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#dmatch