2014-04-17 5 views
0

J'utilise le filtre de Kalman pour effectuer un suivi d'image et j'ai parfois besoin de réorganiser les données pour que les index des différents vecteurs soient les mêmes. Je fais ceci avec un contrôle logique rapide m'assurant que la position de la trame actuelle est dans une tolérance contre la dernière image. si c'est le cas, je déplace les données vers un second vecteur pour correspondre au nouvel index, puis déplace le vecteur entièrement réorganisé vers le vecteur d'origine. Comme ci-dessous:Erreur OpenCV: Échec de l'assertion lors du déplacement de données entre vecteurs

void vector_order(vector<Rect> found_filtered) 
{ 
    int j, i; 
    vector<KalmanFilter> organise_KF(10); 
    vector<kal_ret> organise_kal(10); 
    vector<FilterHistory> organise_MAV(10); 
    for (i=0; i<found_filtered.size(); i++) 
    { 
     for (j=0; j<track_ret.size(); j++) //compare tracks for kalman filter 
     { 
      if (found_filtered[i].x >= track_ret[j].measPt.x-12 || found_filtered[i].x <= track_ret[j].measPt.x+12) 
      { 
       if (found_filtered[i].y >= track_ret[j].measPt.y-30 || found_filtered[i].y <= track_ret[j].measPt.y+30) 
       { 
        organise_kal[i] = track_ret[j]; 
        organise_KF[i] = KF[j]; 
        break; 
       } 
      } 
     }//if there is no match that index will stay empty to be filled by the filter return 

     for (j=0; j<filter_ret.size(); j++) //compare tracks for moving average filter 
     { 
      if (found_filtered[i].x >= filter_ret[j].current.x-12 || found_filtered[i].x <= filter_ret[j].current.x+12) 
      { 
       if (found_filtered[i].y >= filter_ret[j].current.y-30 || found_filtered[i].y <= filter_ret[j].current.y+30) 
       { 
        organise_MAV[i] = filter_ret[j]; 
       } 
      }//if there is no match that index will stay empty to be filled by the filter return 
     } 
    } 

    for (i=0; i<10; i++) 
    { 
     track_ret[i] = organise_kal[i]; 
     filter_ret[i] = organise_MAV[i]; 
     KF[i] = organise_KF[i]; 
    } 
} 

Le problème étant que dès que le système va utiliser les données pour une deuxième fois, il jette l'erreur suivante:

OpenCV Error: Assertion failed (dims <= 2 && (unsigned)i0 < (unsigned)(size.p[0])*size.p[1]) && elemSize() == (((((DataType<_Tp>::type) & ((512 - 1) << 3)) >> 3) + 1) << ((((sizeof(size_t)/4+1)*16384|0x3a50) >> ((DataType<_Tp>::type) & ((1 << 3) - 1))*2) & 3))) in unknown function, file C:\opencv\build\include\opencv2/core/mat.hpp, line 569 

Je suis nouveau au codage. Existe-t-il un meilleur moyen de réorganiser les données ou ai-je manqué une simple étape?

+0

J'ai réalisé le problème. Je n'initialisais pas les filtres de Kalman dans le nouveau vecteur, donc quand le système utilisait un nouveau filtre, il n'y avait pas de données de matrice ou d'ensemble de mise à l'échelle. Tout est maintenant beaucoup mieux. Merci d'avoir regardé – user3544531

Répondre

0

J'ai réalisé le problème. Je n'initialisais pas les filtres de Kalman dans le nouveau vecteur, donc quand le système utilisait un nouveau filtre, il n'y avait pas de données de matrice ou d'ensemble de mise à l'échelle. Tout est maintenant beaucoup mieux. Merci d'avoir regardé

Questions connexes