OpenCV之创建Mat函数的方法

来源:互联网 发布:电脑测试性能软件 编辑:程序博客网 时间:2024/05/22 16:02

No.1 使用Mat()构造函数

最简单明了的方法就是使用Mat()构造函数

Mat M(2,2,CV_8UC3,Scalar(1,2,205));cout<<"M="<<endl<<M<<endl<<endl;

运行结果:

M =
[1, 2, 205, 1, 2, 205
1, 2, 205, 1, 2, 205 ]

对于多维多通道图像,要定义其尺寸,行数和列数!
规则:
CV_[位数][带符号与否][类型前缀]C[通道数]
比如CV_8UC3表示使用了8位的unsighed char型,每个像素由三个元素组成三通道


No.2 在C++中通过构造函数进行初始化

示范代码:

   int sz [] ={ 2, 2 ,2};   Mat L (3, sz, CV_8UC,Scalar::all(0));

创建一个超过二维的矩阵,指定维数,然后传递一个指向数组的指针,这个指针包括每个维度的尺寸,后面的参数参考NO.1


No.3 为已经存在的Ipllmage指针创建信息头

示范代码:

Ipllmage * img = cvLoadImage("1.jpg", 1);Mat mtx(img); //转化Ipllmage*->Mat

No.4 利用Create()函数

利用Mat类的Create()成员函数进行Mat类的初始化

M.create(4, 4, CV_8UC(2));cout << "M= "<< endl << " " << M << endl << endl;

运行效果:


No.5 采用Matlab式的初始化方式

采用Matlab式的初始化方式:zeros()、ones()、eyes()

    Mat E = Mat::eye(4, 4, CV_64F);        cout << "E = " << endl << " " << E << endl << endl;    Mat O = Mat::ones(2, 2, CV_32F);        cout << "O = " << endl << " " << O << endl << endl;    Mat Z = Mat::zeros(3,3, CV_8UC1);    cout << "Z = " << endl << " " << Z << endl << endl;

运行结果:

这里写图片描述这里写图片描述这里写图片描述


No.6 对于小矩阵用逗号分隔初始化

示范代码:

    Mat C = (Mat_<double>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);     cout << "C = " << endl << " " << C << endl << endl;

运行结果:

这里写图片描述


No.7为存在的 Mat 对象创建一个新的信息头。

使用 clone() 或者 copyTo() 为一个存在的 Mat 对象创建一个新的信息头。

示范代码:

    Mat RowClone = C.row(1).clone();    cout << "RowClone = " << endl << " " << RowClone << endl << endl;

这里写图片描述

0 0