J'écris un module qui estime le flux optique. A chaque pas de temps, il consomme un vecteur std :: où chaque élément du vecteur est un emplacement de pixel courant et un emplacement de pixel précédent. Le vecteur n'est pas commandé. Les nouveaux pixels qui auparavant n'étaient pas visibles seront présents et les emplacements de flux qui n'auront pas été trouvés disparaîtront. Existe-t-il une méthode correcte pour faire correspondre les éléments du nouveau vecteur avec l'ensemble des emplacements de flux optiques estimés?éléments de correspondance entre deux vecteurs std ::
Les vecteurs sont de l'ordre de 2000 éléments.
Ce sont les approches que je envisage:
- itérer naïvement par le nouveau vecteur pour chaque emplacement de flux optique estimé
- itérer naïvement par le nouveau vecteur, mais la suppression de chaque emplacement adapté de sorte que la recherche devient plus rapide que il continue
- exécutez std :: sort sur ma liste et la nouvelle liste à chaque pas de temps. Puis itérer à travers le nouveau vecteur en commençant par le dernier index correspondant +1
Je soupçonne qu'il existe une façon acceptée de faire cela, mais je n'ai pas de formation compi sci.
Je suis en C++ 11 si cela est pertinent.
// each element in the new vector is an int. I need to check if
// there are matches between the new vec and old vec
void Matcher::matchOpticalFlowNaive(std::vector<int> new_vec)
{
for(int i = 0; i < this->old_vec.size(); i++)
for(int j =0; j < new_vec.size(); j++)
if(this->old_vec[i] == new_vec[j]){
do_stuff(this->old_vec[i], new_vec[j])
j = new_vec.size();
}
}
du code s'il vous plaît? [mcve] –
@holmeski - pas sûr de comprendre mais ... es-tu sûr qu'à la place un 'std :: vector',' std :: set' (ou 'std :: multi_set') n'est pas meilleur pour toi ? – max66
Vous feriez mieux de l'exprimer en termes de données pures. Il n'y a pas de concept de flux optique en C++. Donc vous ne pouvez pas en avoir un vecteur. Vous devez modéliser les données du monde réel en types C++, puis expliquer ce que vous voulez exactement extraire de ces deux vecteurs. EDIT: votre fonction n'a pas de sens. Il n'accepte que 'new_flow', où est' old_flow'? – luk32