【OpenCV】创建Mat对象

【方法1】:使用Mat()构造函数

Mat img(2, 2, CV_8UC3, Scalar(0, 0, 255));
cout << "M = " << endl << " " << M << endl;

运行结果:

对于二维多通道图像,首先要定义其尺寸,即行数和列数。然后,指定存储元素的数据类型以及每个矩阵点的通道数。
【方法2】在C/C++中通过构造函数进行初始化

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

上面演示了如何创建一个超过二维的矩阵:指定维数,然后传递一个指向一个数组的指针,这个数组包含每个维度的尺寸;后续的两个参数与方法1相同。
【方法3】为已存在的IplImage指针创建信息头

IplImage *img = cvLoadImage("1.jpg", 1);
Mat mImg(img); // 转换IplImage* -> Mat

【方法4】利用Create()函数

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

运行结果:
这里写图片描述
注意该创建方法不能为矩阵设初值,只是在改变尺寸时重新为矩阵数据开辟内存而已。
【方法5】采用MATLAB式的初始化方式

Mat E = Mat::eye(4, 4, CV_64F);
cout << "E = " << endl << " " << E << endl;

Mat O = Mat::ones(2, 2, CV_32F);
cout << "O = " << endl << " " << O << endl;

Mat Z = Mat::zeros(3, 3, CV_8UC1);
cout << "Z = " << endl << " " << Z << endl;

运行结果:
这里写图片描述
【方法6】对小矩阵使用都好分隔式初始化函数

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

运行结果:
这里写图片描述
【方法7】为已存在的对象创建新信息头
使用成员函数clone()或copyTo()为一个已存在的Mat对象创建一个新的信息头

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

运行结果:
这里写图片描述

【摘自:】《OpenCV3编程入门》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值