Mat类简单用法(一)

小白一枚~ 以下是自己在学习过程中见到的Mat的一些用法,记录一下(注:前面有解释的后面不再解释啦~):
首先是定义Mat型时的一些:
1. Mat::Mat(int rows, int cols, int type)
rows:矩阵行数
cols:矩阵列数
type:CV_8UC1(8位 uchar型 (channel)1通道) 类似可以定义些CV_32FC3.说明:CV_(位数)+(数据类型)+(通道 数)
类型大概有如下这些

#include<iostream>
#include<opencv/highgui.h>

using namespace std;
using namespace cv;

int main(int argc,char**argv)
{
    Mat A(3,2,CV_8UC1);//一通道
    Mat B(3,2,CV_32FC3);//三通道
    cout<<"A="<<A<<endl;
    cout<<"B="<<B<<endl;    

}

输出为:
A=[ 0, 0;
0, 0;
0, 0]
B=[0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0]

2. Mat::Mat(Size size, int type)
Size:矩阵大小 //可以用别的图像的大小也可以自定Size(width,heighth)

#include<iostream>
#include<opencv/highgui.h>

using namespace std;
using namespace cv;

int main(int argc,char**argv)
{
    Mat A(3,2,CV_8UC1);//一通道
    Mat B(A.size(),CV_32FC3);   //以A的大小定义
    cout<<"B="<<B<<endl;    

}

输出为:
B=[0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0]

3.:Mat sampleMat = (Mat_< float>(1, 2) << num1, num2);
这是定义类一个一行两列的内容为float类型的矩阵,并且将num1,num2这两个数赋给矩阵

#include<iostream>
#include<opencv/highgui.h>

using namespace std;
using namespace cv;

int main(int argc,char**argv)
{
    float num1=2;
    float num2=4;       
    Mat sampleMat = (Mat_<float>(1, 2) << num1, num2);
    cout<<"sampleMat="<<sampleMat<<endl;    

}

输出如下:sampleMat=[2, 4]

4.:Mat DataMat(1, 2, CV_32FC1, &a[i][0]);
此处假设a[i][2]。则定义了个一行两列的矩阵,类型为32位浮点型单通道,然后将a[i][0],a[i][1]的值赋给了矩阵。

5.:MatLab中的常用矩阵定义:
零矩阵:cv::Mat::zeros(rows,cols,type)
one矩阵:cv::Mat::ones(rows,cols,type)
单位矩阵:cv::Mat::eye(rows,cols,type)

#include<iostream>
#include<opencv/highgui.h>

using namespace std;
using namespace cv;

int main(int argc,char**argv)
{
    Mat A=Mat::zeros(5,5,CV_8UC1);
    Mat B=Mat::ones(5,5,CV_8UC1);
    Mat C=Mat::eye(5,5,CV_8UC1);
    cout<<"A="<<A<<endl;
    cout<<"B="<<B<<endl;
    cout<<"C="<<C<<endl;    

}

输出如下:

A=[  0,   0,   0,   0,   0;
   0,   0,   0,   0,   0;
   0,   0,   0,   0,   0;
   0,   0,   0,   0,   0;
   0,   0,   0,   0,   0]
B=[  1,   1,   1,   1,   1;
   1,   1,   1,   1,   1;
   1,   1,   1,   1,   1;
   1,   1,   1,   1,   1;
   1,   1,   1,   1,   1]
C=[  1,   0,   0,   0,   0;
   0,   1,   0,   0,   0;
   0,   0,   1,   0,   0;
   0,   0,   0,   1,   0;
   0,   0,   0,   0,   1]

6.:Mat B:B.row(i)取一行

#include<iostream>
#include<opencv/highgui.h>

using namespace std;
using namespace cv;

int main(int argc,char**argv)
{

    Mat B=Mat::ones(5,5,CV_8UC1);
    Mat A=Mat::eye(5,5,CV_8UC1);
    cout<<"B的第一列:"<<B.row(1)<<endl;
    cout<<"A的第一行:"<<A.col(1)<<endl;

}

输出:
B的第一列:[ 1, 1, 1, 1, 1]
A的第一行:[ 0;
1;
0;
0;
0]

其次是使用时的一些:
1.运用已有Mat型result转化成其他类型

Mat result;//将result转化成32FC3型保存至resultf中
Mat resultf;
result.convertTo(resultf,CV_32FC3)

2.作为绘制模板时(定义0矩阵)

Mat output=Mat::zeros(img.rows,img.cols,CV_8UC3)

3.克隆(复制)其他图片

Mat srcImage=imread("1.jpg");
Mat copyImage=srcImage.clone(); //完全复制
Mat image1(srcImage) ;//仅是创建了Mat的头部分,image1与srcImage共享数据区  
Mat image1 = srcImage ;//仅是创建了Mat的头部分,image1与srcImage共享数据区  
Mat copyImage2;
srcImage.copyTo(copyImage2);//完全复制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值