一、 Mat的复制,就是从一个矩阵A,生成相关的另一个矩阵B。
(1)使用赋值的方法,比如通过构造函数生成矩阵N,通过复制生成矩阵P
cv::Mat N(M);
cv::Mat P;
P=M;
这样生成的矩阵,只是新生成一个矩阵头,它的data依然指向矩阵M的data,类似C++中的浅拷贝,比如矩阵M,N,P它们的data都指向地址0x00badd50
(2) 使用copyTo和clone函数
cv::Mat F = M.clone();
cv::Mat G;
F.copyTo(G);
这样可以生成一个全新的矩阵,不但复制矩阵的头信息,而且会生成一个data的拷贝。比如矩阵F和M,它们的data指针地址和F是不同的。
Mat数据类型的转置操作
函数 t()用来实现Mat的转置
Mat C = (Mat_<float>(3,3) << -1, -1, -1, 0, 0, 0, 2, 2,2); for(int i=0;i<C.rows;i++) { for(int j=0;j<C.cols;j++) { cout<<C.at<float>(i,j)<<" "; } cout<<endl; } Mat D; D=C.t(); for(int i=0;i<D.rows;i++) { for(int j=0;j<D.cols;j++) { cout<<D.at<float>(i,j)<<" "; } cout<<endl; }
Mat 乘法运算
Mat C;
Mat D;
Mat E;
E=C*D;
Mat C = (Mat_<float>(2,2) << 1, 2, 3, 4); for(int i=0;i<C.rows;i++) { for(int j=0;j<C.cols;j++) { cout<<C.at<float>(i,j)<<" "; } cout<<endl; } cout<<endl; Mat D= (Mat_<float>(2,2) << 2, 3, 2,3); for(int i=0;i<D.rows;i++) { for(int j=0;j<D.cols;j++) { cout<<D.at<float>(i,j)<<" "; } cout<<endl; } cout<<endl; Mat E; E=C*D; for(int i=0;i<E.rows;i++) { for(int j=0;j<E.cols;j++) { cout<<E.at<float>(i,j)<<" "; } cout<<endl; }