¿Alguien sabe por qué el OpenCV 2 DescriptorMatcher::radiusMatch()
y knnMatch()
toman un vector<vector<DMatch>>& matches
? Estoy un poco confundido acerca de por qué no sería solo un vector, ya que es solo una serie de puntos en la escena que corresponden a la imagen de entrenamiento, ¿verdad?OpenCV DescriptorMatcher radiusMatch y knnMatch formato de resultado
Tengo algo como esto:
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));
}
}
}
pero estoy un poco confundido acerca de cómo asignar la realidad aprox. ubicación del objeto una vez que los tengo a todos en ptsScene
. Los puntos me parecen dispersos cuando los dibujo, por lo que creo que me falta lo que representan los vectores anidados.
muy completo, muchas gracias! –