誰もOpenCV 2 DescriptorMatcher::radiusMatch()
とknnMatch()
がvector<vector<DMatch>>& matches
になる理由を知っていますか?私はちょうどベクトルではない理由についてちょっと混乱しています。なぜなら、それはトレーニング画像に対応するシーン内のポイントの単なる配列なので、そうですか?OpenCV DescriptorMatcher radiusMatchとknnMatchの結果フォーマット
void getMatchingPoints(
const vector<vector<cv::DMatch> >& matches,
const vector<cv::KeyPoint>& keyPtsTemplates,
const vector<cv::KeyPoint>& keyPtsScene,
vector<Vec2f>& ptsTemplate,
vector<Vec2f>& ptsScene
)
{
ptsTemplate.clear();
ptsScene.clear();
for (size_t k = 0; k < matches.size(); k++)
{
for (size_t i = 0; i < matches[k].size(); i++)
{
const cv::DMatch& match = matches[k][i];
ptsScene.push_back(fromOcv(keyPtsScene[match.queryIdx].pt));
ptsTemplate.push_back(fromOcv(keyPtsTemplates[match.trainIdx].pt));
}
}
}
を私は実際には約マップする方法について少し困惑している:
私はこのような何かを持っています。一度オブジェクトの場所は、すべてptsScene
にそれらを持っています。ポイントは私がそれらを描くときに私に散らばっているように見えるので、入れ子にされたベクトルが何を表しているのか見当たりません。この場合k=3
には、各トレーニングのポイントのために、それはクエリセットから3本のベストマッチを見つけるknnMatch(queryDescriptors, trainDescriptors, matchesQueryToTrain, 3)
を呼び出す場合
非常に徹底してありがとう! –