2016-05-12 40 views
3

我想要使用opencv cv::Mat函數push_back向矩陣添加新行,但我想預緩衝矩陣的大小,以便數據不需要不斷重新分配。 cv::mat::reserve函數具有許多行參數,但這意味着您必須指定列數(首先是數據大小)。所以我假設下面的代碼會給我一個空行,我不想要。有沒有一種合適的方式來使用reservepush_back如何使用opencv墊預留?與push_back

cv::Mat M(1, size_cols, CV_32FC1); 
M.reserve(size_rows); 
for (int i = 0; i < size_rows; i++) 
{ 
    GetInputMatrix(A); 
    M.push_back(A.row(i)); 
} 

注意:雖然示例代碼中不顯示它我不知道最終的矩陣的確切大小,但我可以得到一個最大值大小保留。

回答

0

那麼,根據documentation

儲備的作用:

爲SZ行的方法,保留空間。如果矩陣已經有足夠的空間存儲sz行,則什麼都不會發生。如果矩陣重新分配,則保留第一個Mat :: rows行。該方法模擬STL向量類的相應方法。

這就是說,只要你沒有那麼大量的數據存儲,什麼都不會發生。

2

在開始時使用空的墊子就好了。列號和類型將通過第一個push_back確定。

cv::Mat M; // empty mat in the beginning 
M.reserve(size_rows); 
for (int i = 0; i < size_rows; i++) { 
    GetInputMatrix(A); 
    M.push_back(A.row(i)); 
} 
+0

謝謝,我希望這事實上確實預留了空間。我有點懷疑。 – Geronimo