2013-08-13 16 views
15

To jest bardzo proste pytanie, ale nie mogłem znaleźć odpowiedzi w Google lub w dokumentacji OpenCV. Jak wstawić wiersz z wektorem lub numerem domyślnym na końcu cv::Mat? Próbowałem:Dodaj wiersz do macierzy w OpenCV

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

który kompiluje, ale zawsze dostaje mi błąd potwierdzenia. Jak to zrobić?

+0

proszę pokazać, w jaki sposób Mat wygląda. tak, możesz wstawić wiersz w ten sposób, ale to, co wstawisz, musi wyglądać jak rzeczywisty wiersz. – berak

+0

Mata wygląda następująco: [8.4-312, 2.1e-314, 2.1e-314; 4294967296.0, -2,3e + 77, 2,8e-269]. Czy naprawdę możliwe jest użycie 'std :: vector'? – Neptilo

Odpowiedz

32

Dodatkowym elementem musi być Mat z taką samą liczbą kolumn jako matrycy pojemnika:

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

Dziękuję, to działa. Ale zastanawiam się, dlaczego doktor mówi: "[Metody' Mat :: push_back'] emulują odpowiednią metodę klasy wektorowej STL ". – Neptilo

+0

Sądzę, że jest tak, ponieważ można dodawać i usuwać ("pop_back") elementy na końcu macierzy, będąc rzędami tych elementów (zamiast pojedynczych wartości), tak jak można to zrobić za pomocą wektorów. – ChronoTrigger

+0

Ok, więc po prostu oznacza, że ​​'cv :: Mat' ma funkcje homologiczne do wektorów STL, ale nie używa wektorów STL jako argumentów. Dokument OpenCV powinien być nieco bardziej jednoznaczny IMO. Dziękuję! – Neptilo

Powiązane problemy