10

我想尝试FREAKOpenCV 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);

}
4

2 回答 2

8

FREAK 只是描述符。没有对应的特征检测器。

因此,您需要将其与可用的检测器之一结合使用:FAST、ORB、SIFT、SURF、MSER 或使用goodFeaturesToTrack函数。

于 2012-10-15T18:13:04.643 回答
7

有一个 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);
于 2012-12-12T07:54:52.733 回答