使用OpenCV完成矩阵操作

#include<opencv2/opencv.hpp>  
#include<iostream>  
using namespace std;  
using namespace cv;  
int main()  
{  
    float array[]={1,2,3};  
    float array1[]={2,3,1};  
    //用数组初始化Mat  
    Mat mat=Mat(1,3,CV_32F,array);  
    Mat mat1=Mat(1,3,CV_32F,array1);  
    Mat tempmat;  
    //对mat拷贝  
    mat.copyTo(tempmat);  
    cout<<tempmat<<endl;  
    //选择roi,rect的四个参数分别是(x,y)坐标,第三个参数是宽度,第四个参数是高度  
    Mat roi(mat,Rect(0,0,2,1));  
    cout<<roi<<endl;  
    //mat-mat1的1范数  
    cout<<norm(mat,mat1,CV_L1)<<endl;  
    //mat-mat1的2范数  
    cout<<norm(mat,mat1,CV_L2)<<endl;  
    //打印mat的内容  
    cout<<mat<<endl;  
    //创建对角为1的矩阵  
    Mat eyemat=Mat::eye(4,4,CV_8U);  
    cout<<eyemat<<endl;  
    //提取eyemat的1-2行,3-4列  
    Mat submat=eyemat(Range(0,2),Range(2,4));  
    cout<<submat<<endl;  
    //abs(),max(),min(),+,-,*,/等操作很简单,就不写了  
    float a[2][2]={2,3,1,2};  
    float b[2][2]={2,1,0,-1};  
    Mat amat(2,2,CV_32F,a);  
    Mat bmat(2,2,CV_32F,b);  
    cout<<amat<<endl;  
    cout<<bmat<<endl;  
    //求amat的逆  
    cout<<amat.inv()<<endl;  
    //两矩阵相乘  
    cout<<amat.mul(bmat)<<endl;  
    //生成一个值为0的矩阵  
    cout<<Mat::zeros(3,3,CV_32F)<<endl;  
    //生成一个值为1的矩阵  
    cout<<Mat::ones(3,3,CV_32F)<<endl;  
    system("pause");  
}  


/************************************************************************************/

#include<opencv2/opencv.hpp>  
#include<assert.h>  
using namespace cv;  
int main()  
{  
    Mat srcImage=imread("f:/huangshan.jpg");  
    Mat dstImage=imread("f:/Lena.jpg");  
    assert(srcImage.data!=NULL && dstImage.data!=NULL);   
  
    Mat roi=srcImage(Rect(0,0,dstImage.cols,dstImage.rows)); //获取感兴趣区域  
    Mat mask = imread("f:/Lena.jpg",0);  
    namedWindow("image",WINDOW_AUTOSIZE);  
    roi=roi.t(); //mat转置  
    flip(roi,roi,0); //0为上下翻转,>0为左右翻转,<0同时上下左右翻转  
    //将掩膜拷贝到ROI中  
    //dstImage.copyTo(roi,mask);  
    addWeighted(roi,0.7,dstImage,0.3,0.,roi);  
  
      
    //Mat mask = imread("f:/huangshan.jpg",0);  
    //img.copyTo(roi,mask);  
    imshow("image",srcImage);  
    waitKey();  
    return 0;  
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值