如何在openCV 3.2.0中使用BruteForce Matching?

问题描述 投票:0回答:2

我正在使用opencv 3.2.0,我正在尝试分别使用FAST,BRISK,BruteForce进行检测,描述符计算和描述符匹配。我在Visual Studio 2017中使用C ++。

std::vector<KeyPoint> keypoints1, keypoints2;
cv::Mat descriptors1, descriptors2;
m_image_A = imread("a.bmp", IMREAD_GRAYSCALE);
m_image_B = imread("b.bmp", IMREAD_GRAYSCALE);
cv::Ptr<cv::FeatureDetector> a = cv::FastFeatureDetector::create();
a->detect(m_image_A, keypoints1);
a->detect(m_image_B, keypoints2);
cv::Ptr<cv::DescriptorExtractor> ex = cv::BRISK::create();
ex->compute(m_image_A, keypoints1, descriptors1);
ex->compute(m_image_B, keypoints2, descriptors2);

cv::Ptr<cv::DescriptorMatcher> matcher;
std::vector<vector<DMatch>> matches;

matcher = cv::BFMatcher::create();
matcher->knnMatch(descriptors1, descriptors2, matches, 2);

这是我的简单代码,它无法正常运行。我阅读了很多代码和提示,但我找不到适合我的问题的解决方案。

有没有人可以帮助我?如何使其正常运行?

c++ opencv opencv3.2
2个回答
0
投票

如果此方法不起作用,请使用单应法下面的基于flann的方法。它将为您提供关键点之间距离的精确结果,以及在任何角度下实际匹配的点数。


0
投票

BFMatcher构造函数具有参数normType。

BFMatcher::create(NORM_HAMMING, false);

对于SIFT和SURF,可以应用标准L1规范,但应使用BRISK NORM_HAMMING的文档说明(https://docs.opencv.org/3.4.0/d3/da1/classcv_1_1BFMatcher.html)。也许这解决了这个问题。但显然你必须说明你的解决方案“无法正常运行”意味着什么。 我在尝试不同的描述符和匹配技术组合时遇到的另一个问题是,某些描述符以二进制格式保存,因此无法使用标准匹配方法进行后处理。

© www.soinside.com 2019 - 2024. All rights reserved.