OpenCV 2.42 FeatureDetector FREAK
Я хочу попробовать новый класс FREAK
в OpenCV 2.4.2.
Я пытался использовать общий интерфейс функции детектора для создания FREAK
, но, конечно, это не работает. Как мне пересмотреть мой код, чтобы получить результат?
#include <stdio.h>
#include <iostream>
#include <opencv\cxcore.h>
#include <opencv2\nonfree\features2d.hpp>
#include <opencv\highgui.h>
#include <opencv2\features2d\features2d.hpp>
#include <vector>
using namespace std;
using namespace cv;
int main(){
Mat mat1;
mat1 = imread("Testimg06.jpg",0);
vector<KeyPoint> P1;
Ptr<FeatureDetector> freakdes;
Ptr<DescriptorExtractor> descriptorExtractor;
freakdes = FeatureDetector::create("FREAK");
freakdes->detect(mat1,P1);
Mat keypoint_img;
drawKeypoints( mat1, P1, keypoint_img, Scalar::all(-1), DrawMatchesFlags::DEFAULT );
imshow("Keypoints 1", keypoint_img );
cvWaitKey(0);
}
2 ответа
Решение
Существует пример OpenCV, который показывает, как использовать FREAK в сочетании с FAST.
Основные инструкции:
FREAK extractor;
BruteForceMatcher<Hamming> matcher;
std::vector<KeyPoint> keypointsA, keypointsB;
Mat descriptorsA, descriptorsB;
std::vector<DMatch> matches;
FAST(imgA,keypointsA,10);
FAST(imgB,keypointsB,10);
extractor.compute( imgA, keypointsA, descriptorsA );
extractor.compute( imgB, keypointsB, descriptorsB );
matcher.match(descriptorsA, descriptorsB, matches);
FREAK только дескриптор. Нет соответствующего детектора функций.
Поэтому вам нужно объединить его с одним из доступных детекторов: FAST, ORB, SIFT, SURF, MSER или использовать goodFeaturesToTrack
функция.