基于opencv3.1的特征检测、特征点匹配、图像拼接(一)

基于opencv3.1的特征检测、特征点匹配、图像拼接(一)

安装好opencv,opencv_contrib并全部配置好之后,查找了一些大佬的源码,竟无一能运行,主要存在两个问题:

  1. 无法打开 “opencv2/nonfree/nonfree.hpp”
  2. 无法打开 "opencv2/legacy/legacy.hpp
    问题在于,3.1版本的opencv的opencv2文件夹下没有nonfree和legacy子文件夹,开始在xfeatures2d文件夹下侥幸看到了nonfree.hpp以为可以抢救,后来发现并不可以,理想和现实差距很大。
    没有办法只好读opencv自带的源码;位置在:D:\opencv310\opencv\opencv_contrib\modules\xfeatures2d\samples(我的安装路径)
    里面有四个很重要的cpp,第三个是surf_matcher;
    D:\opencv310\opencv\opencv_contrib\modules\xfeatures2d\src(这个里面有surf.cpp的源码,暂时没有深入研究)

关于surf_matcher

第一次打开这个cpp之后竟无从下手,一堆模板类,主函数一进去就退出,加了几个断点并查阅资料后发现,改动以下部分再运行即可:
先把源码附上:(虽然长但是不是太难)

#include <iostream>
#include <stdio.h>
#include "opencv2/core.hpp"
#include "opencv2/core/utility.hpp"
#include "opencv2/core/ocl.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/calib3d.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/xfeatures2d.hpp"

using namespace cv;
using namespace cv::xfeatures2d;

const int LOOP_NUM = 10;
const int GOOD_PTS_MAX = 50;
const float GOOD_PORTION = 0.15f;

int64 work_begin = 0;
int64 work_end = 0;

static void workBegin()
{
   
    work_begin = getTickCount();
}

static void workEnd()
{
   
    work_end = getTickCount() - work_begin;
}

static double getTime()
{
   
    return work_end /((double)getTickFrequency() )* 1000.;
}

struct SURFDetector
{
   
    Ptr<Feature2D> surf;
    SURFDetector(double hessian = 800.0)
    {
   
        surf = SURF::create(hessian);
    }
    template<class T>
    void operator()(const T& in, const T& mask, std::vector<cv::KeyPoint>& pts, T& descriptors, bool useProvided = false)
    {
   
        surf->detectAndCompute(in, mask, pts, descriptors, useProvided);
    }
};

template<class KPMatcher>
struct SURFMatcher
{
   
    KPMatcher matcher;
    template<class T>
    void match(const T& in1, const T& in2, std::vector<cv::DMatch>& matches)
    {
   
        matcher.match(in1, in2, matches);
    }
};

static Mat drawGoodMatches(
    const Mat& img1,
    
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值