opencv Mat 的基本操作

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

opencv Mat 的基本操作_第1张图片

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


你可能感兴趣的:(opencv Mat 的基本操作)