int main(){
cv::Mat m1=(cv::Mat_<int>(3,2)<<1,2,3,4,5,6);
cv::Mat m2=(cv::Mat_<int>(3,2)<<2,4,6,8,10,12);
cv::Mat m3=(cv::Mat_<int>(3,2)<<3,6,9,12,15,18);
//方法1
cv::Mat inm[]={m1,m2,m3};
cv::Mat outm;
cv::merge(inm,3,outm); // 合并后行数和列数不变。each element of the output array will be a concatenation of the elements of
// the input arrays, where elements of i-th input array are treated as mv[i].channels()-element vectors.
std::cout<<outm<<std::endl;
//方法2(这个挺好的)
std::vector<cv::Mat> inm1;
inm1.push_back(m1);
inm1.push_back(m2);
inm1.push_back(m3);
cv::Mat outm1;
cv::merge(inm1,outm1);
std::cout<<outm1<<std::endl;
//
std::cout<<"outm1.rows:"<<outm1.rows<<std::endl;
std::cout<<outm1.rowRange(1,3)<<std::endl;
std::cout<<"outm1.cols:"<<outm1.cols<<std::endl;
std::cout<<outm1.colRange(0,1)<<std::endl;
return 0;
}
但是这种会出现问题:
for (int i = 0; i < 32; i++)
{
channels.push_back(var1); //添加32次Mat类var1, 在vector类中作用为在vector尾部加入一个数据
}
添加的都是最后一次来的那个,同一个mat值。
比如说我想的是PointCloud中存放的应该是两组坐标点:(0,0,0)和(10,10,10)
但结果却是:(10,10,10)和(10,10,10)
原因是:pushback会调用拷贝构造函数来拷贝数据,这就涉及到Mat的深拷贝和浅拷贝问题了
解决方案:
channels.push_back(I1.clone()); //深拷贝
//channels.push_back(I1);///这里pushback调用的是Mat的浅拷贝函数,数据共享,
http://www.mamicode.com/info-detail-2774438.html
http://blog.sina.com.cn/s/blog_65d2b0b20102y2wv.html