2016-08-27 49 views
0

我有一個關於for循環及其返回值的問題。這是C++代碼,我使用的是openCV 2.4V。返回值「res」如何更新? (ConcativeMat Con NN)

此功能的輸入最大值爲600個圖像並進行池化。 600圖片< <合併< <最大值點。 「res」矩陣的大小是600x128,vec.size()= 600。

對於我來說,在for循環中,res永遠不會更新,但返回值不是零。

我懷疑

「ptmat.copyTo(子視圖)」

,因爲,我認爲是沒有必要的線。但是當我把它拿出來時,res沒有更新(像初始Mat一樣是零)。任何人都可以解釋res值如何得到更新?

此外,爲什麼這個函數被稱爲concatenate ..?

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

根據OpenCV documentation,墊::運算()不使矩陣數據的一個副本,從而在環路中的任何變化,以子視圖矩陣對象將在RES矩陣物體反射以及。這就是你剛纔提到的行:

ptmat.copyTo(subView); 

這就是所謂的串連,因爲它加到墊對象的二維矢量成一個單一的一個。