OpenCV中有很多例子,其中匹配的示例也有几个,但是没有找到利用几何对匹配结果进行过滤的示例,因此在其中的一个demo中添加了几行代码,使用基础矩阵对错误匹配进行删除,当然对于平面也可以采用H矩阵处理,这里只用H矩阵框出了范围,没有过滤实现。在sufr中minHessian是一个阈值,起到对特征点的一个过滤作用,minHessian值越高,得到的关键点越少,但是关键点也就跟好。完整代码如下:
#include <iostream>
#include "opencv2/core.hpp"
#ifdef HAVE_OPENCV_XFEATURES2D
#include "opencv2/calib3d.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/xfeatures2d.hpp"
using namespace cv;
using namespace cv::xfeatures2d;
using std::cout;
using std::endl;
int main( int argc, char* argv[] )
{
Mat img_object = imread("../data/box.png", IMREAD_GRAYSCALE);
Mat img_scene = imread("../data/box_in_scene.png", IMREAD_GRAYSCALE);
//-- Step 1: Detect the keypoints using SURF Detector, compute the descriptors