2016-08-27 4 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 мат :: оператор() не делает копию данных матрицы, таким образом, любое изменение в подпанель объекта матрицы в цикле будет отражено в Рез матрица объекта, а также , Это линия вы упомянули:

ptmat.copyTo(subView); 

Это называется конкатенация, поскольку он присоединяет 2D вектор объектов Матем в один.