【问题标题】:Using featuredescriptors like ORB, Fast, Brsik with OpenCv 3.2在 OpenCv 3.2 中使用 ORB、Fast、Brsik 等特征描述符
【发布时间】:2017-03-25 06:50:13
【问题描述】:

我对@9​​87654325@ 很陌生。我关注this tutorial在图片中搜索对象,我能够成功运行代码。

在搜索时,我看到有 more options 用于特征匹配(例如 Fast、ORB 或 BRISK)。所以我决定尝试与SURF 不同的描述符。

但是我遇到了麻烦。我必须做什么才能创建不同的描述符?有人可以帮助我吗,也许是OpenCV3.2 的代码示例? :)

这是我在搜索时发现的link,但遗憾的是它不适用于OpenCV 3.2。

【问题讨论】:

标签: c++ performance opencv orb brisk


【解决方案1】:

OpenCV 3 引入了一致的特征检测 API。

也就是说,每个特征检测器都实现了一个静态 create() 方法,该方法将 cv::Ptr 返回给相应的检测器。

这是一个显示所描述行为的快速示例:

#include <iostream>
#include <vector>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/features2d.hpp>
#include <opencv2/xfeatures2d.hpp>


int main(int argc, char *argv[])
{
    if(argc > 1) {
        cv::Mat img = cv::imread(argv[1], cv::ImreadModes::IMREAD_GRAYSCALE);
        if(!img.empty()) {
            cv::Ptr<cv::xfeatures2d::SiftFeatureDetector> siftDetector = cv::xfeatures2d::SiftFeatureDetector::create();
            cv::Ptr<cv::BRISK> briskDetector = cv::BRISK::create();

            std::vector<cv::KeyPoint> siftKeypoints;
            std::vector<cv::KeyPoint> briskKeypoints;

            siftDetector->detect(img, siftKeypoints);
            briskDetector->detect(img, briskKeypoints);

            std::cout << "Detected " << siftKeypoints.size() << " SIFT keypoints." << std::endl;
            std::cout << "Detected " << briskKeypoints.size() << " BRISK keypoints." << std::endl;
            return 0;
        } else {
            std::cout << "Unable to load image, aborting." << std::endl;
            return -1;
        }
    }
    std::cout << "A path to an (image) file is missing." << std::endl;
    return -1;
}

按照此示例,您可以使用最新文档中的每个 OpenCV 检测器:

Default descriptors

Non-free descriptors

Experimental descriptors

【讨论】:

  • 非常感谢!这正是我想要的:)
  • 很高兴我能帮上忙。如果您的问题得到解决,请考虑接受答案。
  • 很棒的答案。
猜你喜欢
  • 2013-01-01
  • 1970-01-01
  • 2017-10-05
  • 1970-01-01
  • 2018-06-28
  • 2012-05-30
  • 2014-05-07
  • 2012-07-18
  • 1970-01-01
相关资源
最近更新 更多