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



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


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值