Qualcuno capisce perché gli OpenCV 2 DescriptorMatcher::radiusMatch()
e knnMatch()
prendono un vector<vector<DMatch>>& matches
? Sono un po 'confuso sul motivo per cui non sarebbe solo un vettore, dal momento che è solo una singola serie di punti nella scena che corrispondono all'immagine di allenamento, giusto?OpenCV DescriptorMatcher radiusMatch e knn Formato dei risultati di lettura
Ho qualcosa di simile:
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));
}
}
}
ma io sono un po 'confuso su come mappare in realtà il ca. posizione dell'oggetto una volta che li ho tutti in ptsScene
. I punti mi sembrano sparsi quando li disegno e basta, quindi penso che mi manchi quello che rappresentano i vettori nidificati.
molto accurato, grazie mille! –