opencv3特征检测的配置与使用

 

  1. 官网下载opencv(for Linux)和opencv_contrib。opencv版本:3.4.1
  2. 编译安装。编译选项为: 
    cmake -D OPENCV_EXTRA_MODULES_PATH=<opencv_contrib_path>/modules
          -D CMAKE_BUILD_TYPE=Release 
          -D WITH_CUDA=ON 
          -D CMAKE_INSTALL_PREFIX=/usr/local ..

     

  3. 我遇到了CUDA相关的错误,然后参考这篇博文解决之。
  4. 构建工程时,CMakeLists.txt中添加
    include_directories("/usr/local/include/x86_opencv2/xfeatures2d")

    整体如下:

    cmake_minimum_required(VERSION 3.5)
    project(cvtest)
    
    set(CMAKE_CXX_STANDARD 11)
    
    include_directories("/usr/local/include/x86_opencv2/xfeatures2d")
    
    find_package(OpenCV REQUIRED)
    if (OPENCV_FOUND)
        message(STATUS "找到OpenCV: ${OpenCV_INCLUDE_DIRS}")
        message(STATUS "找到OpenCV: ${OpenCV_LIBS}")
        include_directories(${OpenCV_INCLUDE_DIRS})
    endif (OPENCV_FOUND)
    
    add_executable(cvtest cvtest.cpp)
    target_link_libraries(cvtest ${OpenCV_LIBS} )
  5. 源文件中包含nonfree.hpp,引用命名空间xfeatures2d。整体如下:
  6. 具体的opencv3中的特征检测用法,可以参考这篇博文

代码参考了毛星云的教程,感谢以上提及的共享资料。


//---------------------------------【头文件、命名空间包含部分】----------------------------
//		描述:包含程序所使用的头文件和命名空间
//------------------------------------------------------------------------------------------------
#include "opencv2/opencv.hpp"

#include <nonfree.hpp>
using namespace cv;
using namespace xfeatures2d;


//-----------------------------------【main( )函数】--------------------------------------------
//   描述:控制台应用程序的入口函数,我们的程序从这里开始执行
//-----------------------------------------------------------------------------------------------
int main( int argc, char** argv )
{
    //【1】载入源图片并显示
    Mat srcImage1 = imread("../1.jpg", 1 );
    Mat srcImage2 = imread("../2.jpg", 1 );
    if( !srcImage1.data || !srcImage2.data )//检测是否读取成功
    { printf("读取图片错误,请确定目录下是否有imread函数指定名称的图片存在~! \n"); return false; }
    imshow("src1",srcImage1);
    imshow("src2",srcImage2);

    //【2】定义需要用到的变量和类
    int minHessian = 400;//定义SURF中的hessian阈值特征点检测算子
    Ptr<SURF> detector = SURF::create(minHessian);
//    SurfFeatureDetector detector( minHessian );//定义一个SurfFeatureDetector(SURF) 特征检测类对象
    std::vector<KeyPoint> keypoints_1, keypoints_2;//vector模板类是能够存放任意类型的动态数组,能够增加和压缩数据

    //【3】调用detect函数检测出SURF特征关键点,保存在vector容器中
    detector->detect( srcImage1, keypoints_1 );
    detector->detect( srcImage2, keypoints_2 );

    //【4】绘制特征关键点.
    Mat img_keypoints_1; Mat img_keypoints_2;
    drawKeypoints( srcImage1, keypoints_1, img_keypoints_1, Scalar::all(-1), DrawMatchesFlags::DEFAULT );
    drawKeypoints( srcImage2, keypoints_2, img_keypoints_2, Scalar::all(-1), DrawMatchesFlags::DEFAULT );

    //【5】显示效果图
    imshow("dst 1", img_keypoints_1 );
    imshow("dst 2", img_keypoints_2 );

    waitKey(0);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值