先说下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.第三个参数表示保存图片格式属性的设置标志
//第三个参数一般省略不写
*/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)