首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OpenCv 3.2中使用ORB、Fast、Brsik等特性描述符

在OpenCv 3.2中使用ORB、Fast、Brsik等特性描述符
EN

Stack Overflow用户
提问于 2017-03-24 11:55:09
回答 1查看 3K关注 0票数 1

我对OpenCV很陌生。我按照本教程在图片中搜索对象,并成功地运行了代码。

在搜索时,我看到了用于特性匹配的更多选择 (例如FastORBBRISK)。因此,我决定尝试一个不同于SURF的描述符。

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

这是我在搜索时发现的一个链接,但遗憾的是,它不是针对OpenCV 3.2的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-24 22:50:13

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

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

下面是一个简单的例子,它显示了所描述的行为:

代码语言:javascript
复制
#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的每一个检测器,这些检测器位于最新的文档中:

默认描述符

非自由描述符

实验描述符

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42998863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档