gpt4 book ai didi

c++ - FlannBasedMatcher::match 中的掩码无法正常工作

转载 作者:行者123 更新时间:2023-11-28 04:55:05 26 4
gpt4 key购买 nike

十字邮寄here


我注意到函数 FlannBasedMatcher::match 有一个参数 mask,所以我尝试使用以下代码:

#include<opencv.hpp>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/nonfree/nonfree.hpp"
using namespace cv;
using namespace std;

int main() {
Mat rightImg = imread("right.jpg", 0);
Mat leanImg = imread("lean.jpg", 0);
if (!rightImg.data || !leanImg.data) {
cout << "Fail to read your image. Please check your path.\n";
return -1;
}
resize(leanImg, leanImg, rightImg.size());
int minHessian = 400;
SurfFeatureDetector detector(minHessian);
vector<KeyPoint> keypoints_right, keypoints_lean;

detector.detect(rightImg, keypoints_right);
detector.detect(leanImg, keypoints_lean);

Mat med_right, med_lean;
drawKeypoints(rightImg, keypoints_right, med_right);
drawKeypoints(leanImg, keypoints_lean, med_lean);

SurfDescriptorExtractor extractor;
Mat descriptors_right, descriptors_lean;
extractor.compute(rightImg, keypoints_right, descriptors_right);
extractor.compute(leanImg, keypoints_lean, descriptors_lean);

FlannBasedMatcher matcher;
vector< DMatch > matches;

Mat mask(descriptors_right.rows, descriptors_lean.rows, CV_8UC1, Scalar(0));

Mat target(rightImg.size(), CV_8UC1, Scalar(255));
ellipse(target, Point(rightImg.cols / 2, rightImg.rows / 2), Size(rightImg.cols / 2, rightImg.rows / 2), 0, 0, 360, Scalar(0), CV_FILLED);

for (int i = 0; i < mask.rows; i++) {
uchar* pixrow = mask.ptr<uchar>(i);
for (int j = 0; j < mask.cols; j++) {
if (target.at<uchar>(keypoints_right[i].pt) == 255)
pixrow[j] = 255;
}
}

matcher.match(descriptors_right, descriptors_lean, matches/*, mask*/);//use it or not to test

Mat img_matches;
drawMatches(rightImg, keypoints_right, leanImg, keypoints_lean,
matches, img_matches, Scalar::all(-1), Scalar::all(-1),
vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS);
return 0;
}

这是我的 right.jpglean.jpg . 我不关心right.jpg 中心的那些点。所以我为它做了一个掩码。但我注意到无论我在函数 FlannBasedMatcher::match 中使用 mask 都会得到完全相同的结果。您可以使用或不使用掩码来重现它。我是否遗漏了什么或者 OpenCV 在我的 2.4.13 中有错误?谁能告诉我如何在 FlannBasedMatcher::match 中使用 mask?我认为这是一个有用的参数..

最佳答案

来自docs :“FlannBasedMatcher 不支持屏蔽描述符集的允许匹配,因为 flann::Index 不支持这个。”请参阅 DescriptorMatcher::isMaskSupported 方法来测试匹配器是否支持屏蔽。

关于c++ - FlannBasedMatcher::match 中的掩码无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47338206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com