2013-08-13 72 views
15

Đây là một câu hỏi rất đơn giản nhưng tôi không thể tìm thấy câu trả lời trong Google hoặc trong tài liệu OpenCV. Làm thế nào để bạn chèn một hàng với một vector hoặc một số mặc định ở dưới cùng của một cv::Mat? Tôi đã thử:Thêm hàng vào ma trận trong OpenCV

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

biên dịch, nhưng nó luôn cho tôi lỗi xác nhận. Cách đúng để làm điều đó là gì?

+0

xin vui lòng cho thấy, cách Mát trông như thế nào. có, bạn có thể chèn một hàng theo cách này, nhưng những gì bạn chèn, phải giống như một hàng thực tế. – berak

+0

Mat trông giống như sau: [8.4-312, 2.1e-314, 2.1e-314; 4294967296.0, -2.3e + 77, 2.8e-269]. Có thực sự có thể sử dụng một 'std :: vector'? – Neptilo

Trả lời

32

Yếu tố được thêm vào phải một Mat với cùng số cột như ma trận container:

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

Cảm ơn bạn, nó hoạt động. Nhưng tôi tự hỏi tại sao tài liệu lại nói "Phương pháp [Mat :: push_back'] mô phỏng phương thức tương ứng của lớp vector STL". – Neptilo

+0

Tôi đoán đó là vì bạn có thể thêm và xóa các phần tử ('pop_back') ở cuối ma trận, là các hàng các phần tử này (thay vì các giá trị đơn), như bạn có thể làm với các vectơ. – ChronoTrigger

+0

Ok, do đó, điều đó có nghĩa là 'cv :: Mat' có các hàm tương đồng với các vectơ STL, nhưng không sử dụng các vectơ STL làm đối số. Tài liệu OpenCV phải là IMO rõ ràng hơn một chút. Vậy, cám ơn! – Neptilo

Các vấn đề liên quan