Opencv3编程入门学习笔记(二)之显式创建Mat对象

来源:互联网 发布:福州趣读网络 编辑:程序博客网 时间:2024/04/30 03:12

以下总结是基于《Opencv3编程入门》一书4.1节总结的内容进行验证与总结,验证环境均为Windows10 ---VS2013 C++环境,验证Opencv3.0提供的开发包。

1. 方法壹---Mat()构造函数

Mat M(2,2,CV_8UC3,Scalar(0,0,255));

这是最常用的方法,以上示例构造了一个二位多通道图像。

2. 方法贰---在C\C++中通过构造函数进行初始化

int sz[3] = {2,2,2};

Mat L(3,sz,CV_8UC3,Scalar::all(0));

这个方法笔者在VS2013 C++编译环境中验证没有通过。

3. 方法叁---为已存在的IplImage指针创建信息头

IplImage* img = cvLoadImage("1.jpg",1);

Mat mtx(img);

这个方法笔者在VS2013 C++编译环境中验证没有通过,至于IplImage指针如何转换成Mat还有待探索。

4. 方法肆---使用create()函数

Mat mat();

mat.create(4,4,CV_8UC(2));

这个方法验证可以正常编译,但输出结果与书中所对应结果不同。

5. 方法伍---采用Matlab方式的初始化

a. Mat E = Mat::eye(4,4,CV_64F);

创建了一个4*4的单位矩阵

b. Mat O = Mat::ones(2,2,CV_32F);

创建了一个2*2的全1矩阵

c. Mat Z = Mat::zeros(3,3,CV_8UC1);

创建了一个3*3的全0矩阵

小结:以上验证均可通过。

6. 方法陆---对小矩阵使用逗号分割式初始化函数

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

经验证可以正常使用。

7. 方法柒---为已存在的对象创建信息头

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

Mat RowClone = C.row(1).clone();

RowClone对C矩阵中的第二行进行了克隆,注意row()中的参数是从0开始。

注意:

a. 以上程序均在书中有详细注解;

b. 在控制台输出矩阵统一都可以使用 cout << "C=" <<endl << " " << C << endl << endl;



0 0
原创粉丝点击