2016-05-12 7 views
3

と私は行列に新しい行を追加するためにOpenCVのcv::Mat機能push_backを使用したいが、私は、データは常に再割り当てする必要がないように、行列のサイズをプリキャッシュします。 cv::mat::reserve関数には行数のパラメータがありますが、これは列数(およびデータサイズ)を指定する必要があることを意味します。だから私が推測しているコードでは、私が欲しくない最初の空の行を私に与えるでしょう。 reservepush_backを使用してこれを行う適切な方法はありますか?opencv Mat reserveの使い方は?一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

関連する問題