返回值如何" res"更新了? (ConcativeMat Con NN)

时间:2016-08-27 20:13:27

标签: c++ loops opencv concatenation convolution

我对for循环及其返回值有疑问。这是C ++代码,我使用的是openCV 2.4V。

此功能的输入是带有池的600个图像的最大值。 600张图像<<汇集<<最大值点。 " res"的大小矩阵是600x128,vec.size()= 600.

对我来说,在for循环中,res永远不会更新,但返回值不是零。

我怀疑

" ptmat.copyTo(子视图)"

因为,我认为这不是必要的路线。然而,当我把它拿出来时,res没有得到更新(像初始Mat一样为零)。任何人都可以解释res值如何更新?

为什么这个函数被称为连接...?

 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;
}

1 个答案:

答案 0 :(得分:0)

根据OpenCV documentation,Mat :: operator()不会复制矩阵数据,因此循环中对 subView 矩阵对象的任何更改都会反映在 res 矩阵对象。这就是你提到的那条线:

ptmat.copyTo(subView);

它被称为连接,因为它将Mat对象的2D矢量连接成一个。