美文网首页OPENCV学习笔记
VS2017+OpenCV 3.x+SURF算子使用

VS2017+OpenCV 3.x+SURF算子使用

作者: 似你皮皮虾 | 来源:发表于2019-08-16 11:03 被阅读0次

    本文以VS2017+OpenCV3.4.6+Opencv Contrib 3.4.6为例

    添加SURF,SIFT算子

    前期文件准备

    下载Opencv:https://opencv.org/

    下载高级扩展包:https://github.com/opencv/opencv_contrib/

    下载Cmake工具:https://cmake.org/download/

    选择与所安装Opencv版本一致的contrib

    Opencv Contrib安装

    打开CMAKE-GUI工具

    source code选择你下载好的数据源,build the binaries设置生成路径。

    点击Configure选择VS 2017 X64(根据自己的VS版本以及编译器的位数)。

    以本机为例:

    先点击一次configure

    Finished后再添加配置,将Contrib拓展包解压,设置好路径

    设置相关属性

    添加SIFT,SURF使用权限和模块

    勾选“BUILD_opencv_world”编译静态链接

    添加Python支持(可选)

    再次点击configure和generate

    Open project ->生成-> 批生成->勾选Debug, Release版本生成

    在install目录下生成了opencv_world 文件,即编译成功

    VS环境设置

    包含目录添加

    D:\opencv_3.4.6\new_bulid\install\include\opencv2;

    D:\opencv_3.4.6\new_bulid\install\include\opencv;

    D:\opencv_3.4.6\new_bulid\install\include;

    库目录添加

    D:\opencv_3.4.6\new_bulid\install\x64\vc15\lib

    依赖项

    opencv_world346d.lib;(debug)

    opencv_world346.lib;(release)

    测试代码

    #include"iostream"
    #include"opencv.hpp"
    #include"highgui.hpp"
    #include"xfeatures2d.hpp"
    using namespace cv;
    using namespace std;
    
    int main()
    {
        Mat imageL0 = imread("Pattenimage_L.bmp");
        Mat imageR0 = imread("Pattenimage_R.bmp");
        Mat imageL1, imageR1;
        GaussianBlur(imageL0, imageL1, Size(3, 3), 0.5);
        GaussianBlur(imageR0, imageR1, Size(3, 3), 0.5);
        //找出特征点
        Ptr<Feature2D>f2d = xfeatures2d::SURF::create();
        vector<KeyPoint> keyPoint1, keyPoint2;
        f2d->detect(imageL1, keyPoint1);
        f2d->detect(imageR1, keyPoint2);
        drawKeypoints(imageL1, keyPoint1, imageL1, Scalar::all(-1), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
        drawKeypoints(imageR1, keyPoint2, imageR1, Scalar::all(-1), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
        namedWindow("KeyPoints of imageL", 0);
        namedWindow("KeyPoints of imageR", 0);
        imshow("KeyPoints of imageL", imageL1);
        imshow("KeyPoints of imageR", imageR1);
        //特征点匹配
        Mat descriptors_1, descriptors_2;
        f2d->compute(imageL1, keyPoint1, descriptors_1);
        f2d->compute(imageR1, keyPoint2, descriptors_2);
        BFMatcher matcher;
        vector<DMatch>matches;
        matcher.match(descriptors_1, descriptors_2, matches);
        Mat imageOutput;
        drawMatches(imageL1, keyPoint1, imageR1, keyPoint2, matches, imageOutput);
        namedWindow("picture of matching", 0);
        imshow("picture of matching", imageOutput);
        waitKey(0);
        return 0;
    
    }
    
    

    相关文章

      网友评论

        本文标题:VS2017+OpenCV 3.x+SURF算子使用

        本文链接:https://www.haomeiwen.com/subject/plrfsctx.html