• 【图片匹配】--- SIFT_Opencv3.1.0_C++_ubuntu


      最近在捣鼓图片相似性匹配算法。这里先说一点必要的题外话:

    如果是在同一个object不同角度拍摄的多张图片中,使用SIFT可以有不错的效果;

    如果是寻找类别相同的图片(可能不是同一object),SIFT是无效的。

    前言:

      1 需要安装好opencv3.1.0 + opencv_contrib(放到 opencv主文件夹的module文件夹中)。

      2 可以使用IDE 比如:Codeblocks  or  Eclipse etc 配置好opencv开发所需要的 头文件 + lib so 库文件。

      但是我这里是直接手写的 g++ 编译命令,这样省事儿,可以方便展示。这里不得不吐槽一下,网上一大堆 搓逼教程,乱配置一气,有用的没用的全抄上,而且3.1.0中的imshow等基础的函数都已经换了头文件了。并不在highgui中了。所以我就自己手写了 编译命令,用什么加什么。

    代码如下:

    #include <iostream>
    #include <opencv2/core/core.hpp>
    #include <opencv2/opencv.hpp>  //头文件
    #include <opencv2/xfeatures2d.hpp>
    #include <opencv2/imgcodecs.hpp>
    #include <opencv2/highgui/highgui.hpp>
    
    using namespace cv;  //包含cv命名空间
    using namespace std;
    
    int main()
    {
        //Create SIFT class pointer
        Ptr<Feature2D> f2d = xfeatures2d::SIFT::create();
        //读入图片
        Mat img_1 = imread("kebe1.jpg");
        Mat img_2 = imread("kebe2.jpg");
        //Detect the keypoints
        vector<KeyPoint> keypoints_1, keypoints_2;
        f2d->detect(img_1, keypoints_1);
        f2d->detect(img_2, keypoints_2);
        //Calculate descriptors (feature vectors)
        Mat descriptors_1, descriptors_2;
        f2d->compute(img_1, keypoints_1, descriptors_1);
        f2d->compute(img_2, keypoints_2, descriptors_2);
        //Matching descriptor vector using BFMatcher
        BFMatcher matcher;
        vector<DMatch> matches;
        matcher.match(descriptors_1, descriptors_2, matches);
        //绘制匹配出的关键点lopencv_core
        Mat img_matches;
        drawMatches(img_1, keypoints_1, img_2, keypoints_2, matches, img_matches);
        imshow("【match图】", img_matches);
        //等待任意按键按下
        waitKey(0);
    }
    //g++ sift_match.cpp -o output -L/usr/local/lib -lopencv_imgcodecs  -lopencv_highgui -lopencv_xfeatures2d -lopencv_features2d -lopencv_core -I/usr/local/include

      文件夹下有两张图片,使用最下面注释的 编译命令直接运行

    ./output 即可。

      发现这也不咋准啊! 当然我使用的不是同一张皂片的不同角度,只是觉得差不多。

      下一步,打算校准 + 具体实现使用SIFT来衡量图片的相似度。

      

  • 相关阅读:
    ubuntu下如何安装hg(mercurial)?
    vi启动时报错:YouCompleteMe unavailable: requires Vim 7.4.1578+如何处理?
    linux中如何配置vim的别名为vi?
    linux shell中如何让$就表示为$呢?
    redhat 7.6下如何更新YUM源(仓库)?
    redhat下如何查看red hat版本号?
    javascript快速入门11--正则表达式
    javascript快速入门10--运算符,语句
    javascript快速入门9--引用类型
    javascript快速入门7--ECMAScript语法基础
  • 原文地址:https://www.cnblogs.com/luntai/p/6909192.html
Copyright © 2020-2023  润新知