手把手带你做ORB SLAM系列[1]----ORB特则提取

系统和裤: ubuntu16.04, opencv3.2 PCL

项目背景:这个ORB-SLAM项目是以高翔博士的博客和书的基础上,运行在更新的库上。

文件之间的层级结构,

pkueye[根目录]

--CMakeList.txt

--src

------dectecterFeature.cpp

------CMakeList.txt

--include

--bin

--lib

--data

--build

opencv 3对之前的代码有不小的改动,在特征提取方面,很多用法也发生的了变化

#include
#include "pkubase.h"
using namespace std;


#include 
#include 

int main( int argc, char** argv )
{
    // 从data文件夹里读取两个rgb与深度图
    cv::Mat rgb1 = cv::imread( "./data/rgb.png");
    cv::Mat rgb2 = cv::imread( "./data/rgb1.png");
    // 声明特征提取器与描述子提取器
    cv::Ptr detector;
    cv::Ptr descriptor;

    // 构建提取器,默认两者都为 ORB
    
    // 如果使用 sift, surf ,之前要初始化nonfree模块
    // cv::initModule_nonfree();
    // _detector = cv::FeatureDetector::create( "SIFT" );
    // _descriptor = cv::DescriptorExtractor::create( "SIFT" );
    
    detector = ORB::create();  //opencv 3
    descriptor = ORB::create();

    vector< cv::KeyPoint > kp1, kp2; //关键点
    detector->detect( rgb1, kp1 );  //提取关键点
    detector->detect( rgb2, kp2 );

    cout<<"Key points of two images: "<compute( rgb1, kp1, desp1 );
    descriptor->compute( rgb2, kp2, desp2 );

    // 匹配描述子
    vector< cv::DMatch > matches; 
    cv::BFMatcher matcher;
    matcher.match( desp1, desp2, matches );
    cout<<"Find total "< goodMatches;
    double minDis = 9999;
    for ( size_t i=0; i

你可能感兴趣的:(手把手带你做ORB SLAM系列[1]----ORB特则提取)