失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【OpenCV】OpenCV实战从入门到精通之 -- 显示创建Mat对象的七种方法

【OpenCV】OpenCV实战从入门到精通之 -- 显示创建Mat对象的七种方法

时间:2021-06-11 04:12:04

相关推荐

【OpenCV】OpenCV实战从入门到精通之 -- 显示创建Mat对象的七种方法

目录

1、使用Mat()构造函数

2、C\C++中构造函数进行初始化

3、为已经存在的IplImage指针创建信息头

4、利用Create()函数

5、Matlab方式的初始化

6、对小矩阵使用逗号分隔式初始化函数

7、为已经存在的对象穿件新信息头

Mat不但是一个非常有用的图像容器类,同时也是一个通用聚矩阵类。创建一个Mat对象有很多种方法,列举如下:

1、使用Mat()构造函数

师范代码如下:

# include <opencv2/opencv.hpp># include <iostream>using namespace cv;using namespace std;void main(){Mat M(2, 2, CV_8UC3, Scalar(0, 0, 255)); //Mat()构造函数创建mat类cout << "M= " << " " << M << endl;}

上述代码运行结果为:

对于二维多通道图像,需要制定的参数:(1)尺寸,即行数和列数,上述代码是:(2,2);(2)存储元素的数据类型以及每个矩阵点的通道数,上述代码是:CV_8UC3(表示使用8位的unsigned char类型,每个像素由三个元素组成三通道);(3)Scalar是个short型向量,可以用来初始化矩阵来表示颜色

2、C\C++中构造函数进行初始化

代码如下:

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

上述例子创建了一个超过两维的矩阵,需要的参数:(1)指定维数;(2)传递一个指向一个数组的指针,这里是:sz,数组元素代表每个维度的尺寸。(3)后续就是指定类型和初始值,和方法1相同。

3、为已经存在的IplImage指针创建信息头

代码如下:

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

上述代码是将IplImage 转换为Mat,在OpenCV3.0版本是不适用的,在3.0版本应该是:

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

4、利用Create()函数

利用Mat类中的Create()成员ha你数进行Mat类的初始化操作,此种方法不能为矩阵设置初始值,只是在改变尺寸时重新为矩阵数据开辟内存而已。

代码如下:

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

运行结果为:

5、Matlab方式的初始化

Matlab形式的初始化方式:zeros()、ones()、eyes()。

代码如下:

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

运行结果为:

6、对小矩阵使用逗号分隔式初始化函数

代码如下:

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

7、为已经存在的对象穿件新信息头

使用clone()或者copyTo()为一个已经存在的Mat对象创建一个新的信息头,代码如下:

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

运行结果如下:

如果觉得《【OpenCV】OpenCV实战从入门到精通之 -- 显示创建Mat对象的七种方法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。