2013-08-13 15 views
15

Dies ist eine sehr einfache Frage, aber ich konnte die Antwort in Google oder OpenCV-Dokumentation nicht finden. Wie fügen Sie eine Zeile mit einem Vektor oder einer Standardnummer am Ende einer cv::Mat ein? Ich habe versucht:Fügen Sie eine Zeile zu einer Matrix in OpenCV

std::vector<double> v = {0, 0, 1}; 
m.push_back(v); 

die kompiliert, aber es erhält immer einen Assertion Fehler. Was ist der richtige Weg?

+0

bitte zeigen, wie die Matte aussieht. Ja, Sie können eine Zeile auf diese Weise einfügen, aber was Sie einfügen, muss wie eine tatsächliche Zeile aussehen. – berak

+0

Die Matte sieht so aus: [8.4-312, 2.1e-314, 2.1e-314; 4294967296.0, -2.3e + 77, 2.8e-269]. Ist es wirklich möglich, einen 'std :: vector' zu verwenden? – Neptilo

Antwort

32

Das zusätzliche Element muss ein Mat mit der gleichen Anzahl von Spalten wie die Behältermatrix sein:

cv::Mat m = cv::Mat::ones(4, 3, CV_64F); // 3 cols, 4 rows 
cv::Mat row = cv::Mat::ones(1, 3, CV_64F); // 3 cols 
m.push_back(row);       // 3 cols, 5 rows 
+0

Danke, es funktioniert. Aber ich frage mich, warum der Doc sagt "[Die' Mat :: push_back' Methoden] emulieren die entsprechende Methode der STL Vektorklasse ". – Neptilo

+0

Ich denke, es ist, weil Sie Elemente am Ende der Matrix hinzufügen und löschen können ('pop_back') Elemente, Zeilen diese Elemente (anstelle von Einzelwerten), wie Sie mit Vektoren tun können. – ChronoTrigger

+0

Ok, so dass nur bedeutet, dass 'cv :: Mat 'Funktionen hat, die zu denen von STL-Vektoren homolog sind, aber keine STL-Vektoren als Argumente verwendet. OpenCV Doc sollte ein wenig expliziter IMO sein. Nun, danke! – Neptilo

Verwandte Themen