2013-05-10 4 views
4

Apparemment trompeusement facile. Après tout ce que nous savons qu'un std ou vecteur OpenCV peuvent être facilement convertis en matrice comme ceci:convertir la matrice openCV en vecteur

vector<Point> iptvec(10); 
Mat iP(iptvec); 

L'inverse est suggéré dans OpenCV antisèche:

vector<Point2f> ptvec = Mat_ <Point2f>(iP); 

Cependant, il y a une mise en garde: la matrice doit avoir seulement une ligne ou une colonne. Pour convertir une matrice arbitraire que vous avez à remodeler:

int sz = iP.cols*iP.rows; 
vector<Point2f> ptvec = Mat <Point2f>(iP.reshape(1, sz)); 

Sinon, vous obtiendrez une erreur:

* OpenCV Erreur: Assertion a échoué (obscurcit == 2 & & (tailles [0] == 1 | | tailles [1] == 1 || tailles [0] * tailles [1] == 0)) dans create, fichier /home/.../OpenCV-2.4.2/modules/core/src/matrix.cpp , ligne 1385 ...

+3

Est-ce une question? – alrikai

Répondre

1

Créez un vecteur 2dim et remplissez chaque ligne. E.g:

Mat iP=Mat::zeros(10, 20, CV_8UC1); 
vector<vector<int>> ptvec; 
for (int i = 0; i < iP.rows; i++) 
{ 
    vector<int> row;  
    iP.row(i).copyTo(row); 
    ptvec.push_back(row); 
} 
+0

Notez que lorsque vous créez un vecteur d'une taille connue, il est toujours préférable de préallouer la mémoire car il y a une énorme différence de performance. Ainsi, il serait préférable de faire: le vecteur > ptvec (iP.rows, vecteur (iP.cols)); – kotakotakota

Questions connexes