2016-08-27 3 views
0

私はforループとその戻り値に関する質問があります。これはC++コードで、私はopenCV 2.4Vを使用しています。戻り値 "res"はどのように更新されますか? (ConcativeMat Con NN)

この機能への入力は、プールされた最大600の画像です。 600画像< <プール< <最大値ポイント。 "res"行列のサイズは600x128で、vec.size()= 600です。

私の場合、forループ内でresは決して更新されませんが、戻り値はゼロではありません。

私はそれが必要なラインではないと思った、ので、私は

"ptmat.copyTo(サブビュー)"

を疑いました。しかし、私がそれを取ったとき、resは更新されませんでした(最初のMatのように0になります)。誰でも、res値がどのように更新されるのか説明できますか?

また、この機能はなぜ連結機能と呼ばれていますか?

OpenCV documentationによれば
Mat 
concatenateMat(vector<vector<Mat> > &vec) { 

    int subFeatures = vec[0][0].rows * vec[0][0].cols; 
    int height = vec[0].size() * subFeatures; 
    int width = vec.size(); 
    Mat res = Mat::zeros(height, width, CV_64FC1); 

    for (int i = 0; i<vec.size(); i++) { 
     for (int j = 0; j<vec[i].size(); j++) { 
      Rect roi = Rect(i, j * subFeatures, 1, subFeatures); 
      Mat subView = res(roi); 
      Mat ptmat = vec[i][j].reshape(0, subFeatures); 
      ptmat.copyTo(subView); 
     } 
    } 
    return res; 
} 

答えて

0

、マット::演算子()は、このようにループ内サブビューマトリックスオブジェクトに対する変更が同様RESマトリックスオブジェクトに反映され、マトリクスデータのコピーを作成しません。

ptmat.copyTo(subView); 

それは単一のものにマットオブジェクトの2Dベクトルを連結しているためこれは、CONCATENATEと呼ばれています:それはあなたが言及したラインです。

関連する問題