c++ - 在 OpenCv 3.2 中使用 ORB、Fast、Brsik 等特征描述符

标签 c++ performance opencv orb brisk

我是 OpenCV 的新手。我关注了this tutorial搜索图片中的对象,我能够成功运行代码。

当我搜索时,我看到有 more options用于特征匹配(例如 FastORBBRISK)。所以我决定尝试使用不同于 SURF 的描述符。

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

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

最佳答案

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

关于c++ - 在 OpenCv 3.2 中使用 ORB、Fast、Brsik 等特征描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42998863/

相关文章:

mysql - VIEW 与 WHERE 的功能

opencv - Windows 上的 FFMPEG(用于 H.264 RTSP 解码)

c++ - Opencv floodFill : How do I transform from image to mask coordinates?

c++ - 在 OpenCV 中进行边缘检测后找到最佳感兴趣区域

c++ - 使用 clang 编译时出现正则表达式段错误,可能是编译器错误?

visual-studio - Visual Studio 2008 帮助加载缓慢...怎么回事?

c++ - 搜索和排序 vector 的最快方法

performance - 优化插入列表中间

c++ - boost::variant 与 bool 和 string

c++ - 使用右值编写 operator+ 的正确方法