2015-07-10 5 views
5

Wie erstelle ich eine leere Matte in OpenCV? Nach der Erstellung möchte ich die Methode push_back verwenden, um Zeilen in Mat zu schieben.Wie erstelle ich eine leere Matte in OpenCV?

Etwas wie:

Mat M(0,3,CV_32FC1); 

oder einzige Option:

Mat M; 
M.converTo(M,CV_32FC1); 

?

Antwort

8

Sie können eine leere Matrix erstellen Sie einfach mit:

Mat m; 

Wenn Sie bereits seine Typ kennen, können Sie 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 hinzu:

Mat1f m(2, 3, 4.1f); 
// 
// 4.1 4.1 4.1 
// 4.1 4.1 4.1 

Wenn Sie Werte mit push_back auf eine leere Matrix hinzuzufügen, können Sie wie Sie können bereits durch @berak vorgeschlagen:

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 push_back-Daten pushen müssen, sollten Sie darauf achten, Werte in eine Matrix zu setzen und zu transponieren.

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 
1

Beginnen Sie einfach mit einer leeren Matte. Die 1. push_back bestimmt Art 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]