Mat类简单用法(一)

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

#include
#include

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="<cout<<"B="<

输出为:
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
#include

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=[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
#include

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=[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
#include

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="<cout<<"B="<cout<<"C="<

输出如下:

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
#include

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的第一列:"<1)<cout<<"A的第一行:"<1)<

输出:
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);//完全复制

你可能感兴趣的:(opencv基础)