opencv学习01-Mat构造和简单使用

opencv学习01-Mat构造和简单使用,第1张

先说下opencv常用的一些头文件:

#include                                                                                                                                                                                          
#include 
#include 
#include 

Mat类:

Mat类分为矩阵头和指向储存数据的矩阵指针两部分。opencv在复制和传递图像的时候,只是复制了矩阵头和指向储存数据的指针,矩阵头包括了引用次数,只有当引用次数为0是,才会清空矩阵的空间。

创建Mat类的方法:

//创建一个3*3的矩阵用来存放double类型的数据
Mat A = Mat_(3,3);

//创建一个600*480的三通道矩阵,C3表示三通道,CV_8U表示8位无符号整数
Mat A(640,480,CV_8UC3);

//创建一个3*3的无符号三通道
Mat A(3,3,CV_8UC1);

//创建三通道矩阵
Mat A(3,3CV_8U);

//利用Size()结构来构造,注意Size()结构列在前,行在后,下面代码表示创建640*480的单通道矩阵
Mat A(Size(480,640),CV_8UC1);

//利用已有矩阵创建Mat类,下面代码创建与B相同的Mat A,需要指出的是修改A时也修改了B,因为这种方式仅复制了矩阵头,矩阵指针还是指向同一块内存地址
Mat A(B);

//利用clone()函数,下面代码表示创建一个Mat A,A与B完全相同,A与B不会相互影响
Mat A = B.clone();

//利用copyTo函数,下面代码表示在已有A情况下,copy出一个B出来,与clone的作用效果一样
Mat B;
A.copyTo(B);

//利用Scalar()结构来进行赋值,利用Scalar(0,0,255)会将每个像素的三通道分别赋值为0,0,255
Mat A(2,2,CV_8UC3,Scalar(0,0,255));
Mat B(2,2,CV_8UC2,Scalar(0,255));
Mat C(2,2,CV_8UC3,Scalar(255));

//枚举法赋值
Mat A = (Mat_(2,3) << 1,2,3,4,5,6);

//利用数组赋值
float a[8] = {1,2,3,4,5,6,7,8};
Mat b = Mat(2,2,CV_32FC2,a);
Mat c = Mat(2,4,CV_32FC1,a);

//利用类方法赋值,ones()表示构建一个全为1的矩阵,zeros()表示构建全为0的矩阵,eye()表示构建一个单位矩阵
Mat a = Mat::ones(100,100,CV_8UC1);

读取图像:

imread("lena.png",1);

/*
参数解释:
1.第一个参数表示载入的图片文件路径
2.第二个参数读取图像形式的标志,默认为1表示载入三通道彩色图像
*/

显示图像:

imshow("test",image);

/*
参数说明:
1.第一个参数表示显示窗口的名称
2.第二个参数表示将要显示的图像的名称
*/

保存图像:

imwrite("lena.jpeg",image,IMWRITE_JPEG_QUALITY);

/*
参数说明:
1.第一个参数表示保存的文件放置的路径
2.第二个参数表示将要保存的图片文件
3.第三个参数表示保存图片格式属性的设置标志
//第三个参数一般省略不写
*/

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/719415.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存