Как сделать pairwise_matches для OpenCV stitching_detailed.cpp? - PullRequest
0 голосов
/ 18 марта 2019

В последнее время я пытаюсь внести некоторые изменения в файл stitching_detailed cpp.

У меня есть группа изображений, и я знаю их грубые позиции, поэтому я думаю, что можно рассчитать pairwise_matches для двух изображений по двум изображениям.

vector<std::string> tileNames;
std::map <std::string, int> tileIndex; // index in tileNames
vector<cv::Mat> images;
vector<cv::detail::ImageFeatures> features;
vector<cv::detail::MatchesInfo> pairwise_matches;

// что-то для их заполнения.

for (int i = 0; i < tileNames.size(); i++)
{
    vector<cv::detail::ImageFeatures> featuresMatching(2);
    featuresMatching[0] = features[tileIndex[tileNames[i]]];

    for (auto adjacentElement: tile.adjacentTiles)
    {
        featuresMatching[1] = features[tileIndex[ adjacentElement.name() ]];
        vector<cv::detail::MatchesInfo> pairwise_matchesMatching;

        (*featureMatcher)(featuresMatching, pairwise_matchesMatching);
        featureMatcher->collectGarbage();

        for (auto pairwiseMatchInfo : pairwise_matchesMatching)
        {
            if (pairwiseMatchInfo.dst_img_idx != -1 && pairwiseMatchInfo.src_img_idx !=-1)
            {
                pairwiseMatchInfo.dst_img_idx = featuresMatching[pairwiseMatchInfo.dst_img_idx].img_idx;
                pairwiseMatchInfo.src_img_idx = featuresMatching[pairwiseMatchInfo.src_img_idx].img_idx;

                pairwise_matches.push_back(pairwiseMatchInfo);
            }
    }
}

Однако, когда я использую функцию

    cv::Ptr<cv::detail::Estimator> estimator;
estimator = cv::makePtr<cv::detail::HomographyBasedEstimator>();
vector<cv::detail::CameraParams> cameras;

(*estimator)(features, pairwise_matches, cameras);

, у меня возникает ошибка сегмента.Я думаю, что проблема в том, что с индексом что-то не так.поэтому я проверил matchInfo.Однако я более запутан.

  1. MatchesInfo.dst_img_idx и MatchesInfo.src_img_idx могут быть -1, что это значит?
  2. В Matchesinfo.matches (вектор Dmatch), Dmatch.imgIdx всегда равен -1 или 0. Что это значит?
  3. match.imgIdx, match.queryIdx, match.trainIdx, match.distance, в документе нет ничего, связанного с этими вещами.Я думаю, что ошибка сегмента может быть вызвана этим, так как я не обновлял их при создании нового вектора, "pairwise_matches".Но что я должен сделать, чтобы сделать это правильно?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...