Wie erstelle ich eine leere Matte in OpenCV? Nach der Erstellung möchte ich die Push_back-Methode verwenden, um Zeilen in Mat zu verschieben.
So etwas wie:
Mat M(0,3,CV_32FC1);
oder nur Option ist:
Mat M;
M.converTo(M,CV_32FC1);
?
Sie können eine leere Matrix einfach erstellen mit:
Mat m;
Wenn Sie bereits dessen type kennen, können Sie Folgendes tun:
Mat1f m; // Empty matrix of float
Wenn Sie seine Größe kennen :
Mat1f m(rows, cols); // rows, cols are int
or
Mat1f m(size); // size is cv::Size
Und Sie können auch den Standardwert hinzufügen:
Mat1f m(2, 3, 4.1f);
//
// 4.1 4.1 4.1
// 4.1 4.1 4.1
Wenn Sie mit Push_back
Werte zu einer leeren Matrix hinzufügen möchten, können Sie die von @berak bereits vorgeschlagenen Schritte ausführen:
Mat1f m;
m.Push_back(Mat1f(1, 3, 3.5f)); // The first Push back defines type and width of the matrix
m.Push_back(Mat1f(1, 3, 9.1f));
m.Push_back(Mat1f(1, 3, 2.7f));
// m
// 3.5 3.5 3.5
// 9.1 9.1 9.1
// 2.7 2.7 2.7
Wenn Sie die in vector<>
enthaltenen Daten mit Push_back übertragen müssen, sollten Sie darauf achten, dass die Werte in eine Matrix eingegeben und transponiert werden.
vector<float> v1 = {1.1f, 2.2f, 3.3f, 4.4f, 5.5f};
vector<float> v2 = {1.2f, 2.3f, 3.4f, 4.5f, 5.6f};
Mat1f m1(Mat1f(v1).t());
Mat1f m2(Mat1f(v2).t());
Mat1f m;
m.Push_back(m1);
m.Push_back(m2);
// m
// 1.1 2.2 3.3 4.4 5.5
// 1.2 2.3 3.4 4.5 5.6
beginnen Sie einfach mit einer leeren Matte. Der 1. Push_back bestimmt Typ und Größe.
Mat big;
big.Push_back(Mat(1,5,CV_64F,3.5));
big.Push_back(Mat(1,5,CV_64F,9.1));
big.Push_back(Mat(1,5,CV_64F,2.7));
[3.5, 3.5, 3.5, 3.5, 3.5;
9.1, 9.1, 9.1, 9.1, 9.1;
2.7, 2.7, 2.7, 2.7, 2.7]