2012-12-14 3 views
0

Ce que j'essaie de faire est de prendre la toute première matrice à partir d'une itération, et de l'enregistrer comme une matrice séparée que je peux ensuite utiliser pour effectuer des fonctions sur le reste des données . Voici mon code pour les itérations;OpenCV matrix et FileNodeIterator: sélection de la première itération

FileNode n = fs.root(); 
    for (FileNodeIterator current = n.begin(); current != n.end(); current++) 
    { 
     FileNode item = *current; 
     Mat v, pose; 
     item["pose"] >> v; 
     string Frame; 
     Frame = item.name(); 

     if (v.rows != 0) // finding the nodes that contain data and saving them as "pose" 
     { 
      transpose(v, pose); 
      pose.size(); 
      cout << "The size of pose for " << Frame; 
      cout << " is: \n" << pose.size()<< "\n Data was collected for this frame: \n" << pose << endl; 
     } 

     if (v.rows != 6) // Nodes with no data 
     { 
      cout << "The size of pose for " << Frame; 
      cout << " is: \n" << v.size() << "\n No Data was collected for this frame. \n" << endl; 

     } 

Est-il possible de prendre la première instance de « pose » et l'enregistrer comme une autre matrice, par exemple, la « base »?

Répondre

0

Si je comprends bien, peut-être ce que vous voulez est de déclarer un drapeau que vous pouvez utiliser pour enregistrer uniquement la première instance de votre matrice, quelque chose comme ceci:

FileNode n = fs.root(); 
bool firstTime = true; 
Mat base; 
for (FileNodeIterator current = n.begin(); current != n.end(); current++) 
{ 
    FileNode item = *current; 
    Mat v, pose; 
    item["pose"] >> v; 
    string Frame; 
    Frame = item.name(); 

    if (v.rows != 0) // finding the nodes that contain data and saving them as "pose" 
    { 
     transpose(v, pose); 
     pose.size(); 
     cout << "The size of pose for " << Frame; 
     cout << " is: \n" << pose.size()<< "\n Data was collected for this frame: \n" << pose << endl; 
    } 

    if (v.rows != 6) // Nodes with no data 
    { 
     cout << "The size of pose for " << Frame; 
     cout << " is: \n" << v.size() << "\n No Data was collected for this frame. \n" << endl; 

    } 

    if(firstTime) 
    { 
     base = pose.clone(); 
     firstTime = false; 
    } 
} 

Notez le clone(), cela est nécessaire si vous voulez une copie complète de l'en-tête et des données de la matrice.

Questions connexes