我对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;
}
答案 0 :(得分:0)
根据OpenCV documentation,Mat :: operator()不会复制矩阵数据,因此循环中对 subView 矩阵对象的任何更改都会反映在 res 矩阵对象。这就是你提到的那条线:
ptmat.copyTo(subView);
它被称为连接,因为它将Mat对象的2D矢量连接成一个。