#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;
}
使用OpenCV完成矩阵操作
猜你喜欢
转载自blog.csdn.net/Z5337209/article/details/44202959
今日推荐
周排行