2011-11-18 14 views
11

Tôi đã sau đây khởi tạo ở phía trên cùng của một hàm:Làm thế nào để khởi tạo một cách chính xác một cv :: trỏ Mat để một ma trận 0 với số không()

cv::Mat *m; 

Sau đó, trong một vòng lặp Tôi bố trí ma trận mới với tên này và lưu trữ chúng trong một danh sách. Tôi muốn họ khởi tạo như ma trận bằng không với một kích thước cụ thể.

Đây là những gì tôi đã cố gắng:

m = new cv::Mat::zeros(height, width, CV_32F); 

Tôi cố gắng này dựa trên các ví dụ được đưa ra trong các tài liệu OpenCV. Cách chính xác để thực hiện thao tác này là gì?

+0

Theo các tài liệu bạn có thể làm điều đó như thế này ' cv :: Mat m = cv :: Mat :: số không (chiều cao, chiều rộng, CV_32F); http://opencv.willowgarage.com/documentation/cpp/core_basic_structures.html#cv-mat-zeros – detunized

Trả lời

19

Từ các tài liệu của Mat::zeros nó sử dụng sử dụng như vậy

cv::Mat m = cv::Mat::zeros(height, width, CV_32F); 

Nếu bạn muốn sử dụng một Mat cấp phát trên heap sử dụng

cv::Mat * m = new cv::Mat(cv::Mat::zeros(height, width, CV_32F)); 

// use m 

delete m; // don't forget to delete m 
+8

Nếu tôi không nhầm, nó thường là một ý tưởng tồi để phân bổ cv :: Mat's trên heap? Cấu trúc cv :: Mat sử dụng một con trỏ heap để dữ liệu hình ảnh của nó trong nội bộ, vì vậy nó sẽ không chiếm không gian trên ngăn xếp. Nó sử dụng tính toán tham chiếu nội bộ và sẽ tự xóa khi số đếm của nó bằng 0. – escapecharacter

+2

Trong hầu hết các trường hợp, phân bổ Mat trên heap là một ý tưởng tồi. –

+0

Dường như khởi tạo ':: zeros' thậm chí không hoạt động trên heap. –

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