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