2013-02-11 3 views
1

Ayant vector<Descriptor> m_keyDescsComment convertir le vecteur <...> en cv :: Mat?

spécifié comme descripteur:

Descriptor(float x, float y, vector<double> const& f) 
{ 
    xi = x; 
    yi = y; 
    fv = f; 
} 

Poussé comme:

m_keyDescs.push_back(Descriptor(descxi, descyi, fv)); 

Comment convertir ce vecteur cv :: Mat?

J'ai essayé

descriptors_scene = cv::Mat(m_keyDescs).reshape(1); 

Le projet débogue sans erreur, mais quand il exécute une erreur apparaît dans Qt Creator sur mon mac:

test Quitter rouvre de façon inattendue Cliquez pour ouvrir l'application.

Répondre

2

Vous ne pouvez pas convertir directement un vecteur d'une classe définie manuellement en un Mat. Par exemple, OpenCV n'a aucune idée de l'endroit où placer chaque élément et les éléments ne sont même pas tous du même type (le troisième n'est même pas un seul élément donc il ne peut pas être un élément dans un Mat). Cependant, vous pouvez convertir un vecteur d'ints ou de floats directement en un Mat, par exemple. Voir plus d'informations dans la réponse here.

0
#include <opencv2/opencv.hpp> 

using namespace std; 
using namespace cv; 

class Descriptor { 
public: 
    float xi; 
    float yi; 
    vector<double> fv; 
    Descriptor(float x, float y, vector<double> const& f) : 
    xi(x), yi(y), fv(f){} 
}; 

int main(int argc, char** argv) { 
    vector<Descriptor> m_keyDescs; 
    for (int i = 0; i < 10; i++) { 
    vector<double> f(10, 23); 
    m_keyDescs.push_back(Descriptor(i+3, i+5, f)); 
    } 
    Mat_<Descriptor> mymat(1, m_keyDescs.size(), &m_keyDescs[0], sizeof(Descriptor)); 
    for (int i = 0; i < 10; i++) { 
    Descriptor d = mymat(0, i); 
    cout << "xi:" << d.xi << ", yi:" << d.yi << ", fv:["; 
    for (int j = 0; j < d.fv.size(); j++) 
     cout << d.fv[j] << ", "; 
    cout << "]" << endl; 
    } 
} 
Questions connexes