一、Mat类
1.1 Mat类简介
Mat类是一个储存矩阵数据的容器,包括灰度、向量、矩阵、彩色图像等数据。Mat类分为矩阵头和指向存储数据的矩阵指针两部分。
矩阵头:
矩阵尺寸:
存储方法:
地址:
引用次数:
而图像传递和复制过程中,主要开销是存放矩阵数据,在Opencv中复制和传递图像时,只是复制了矩阵头和指向存储数据的指针。
1.2 构造函数
Mat类还可以存储double、float、uchar、unsigned char数据类型
如: Mat A= Mat<double>(3,3);
Mat A;//创建了一个名称是A的矩阵头 用于保存读取数据的结果和某个·函数的输出结果
Mat B(A);
Mat B.clone(A);//数据域不同了
Mat B(A,Range(x1,x2),Range(y1,y2));
Mat A(640,480,CV_8UC1);//知道尺寸和数据类型时用,比如:内参矩阵、旋转矩阵
Mat A(Size(480,640),CV_8UC1);
Mat的数据类型:
CV_8U: 8位无符号整数 CV_16U: 16位无符号整数
CV_8S: 8位有符号整数 CV_16S: 16位有符号整数
CV_32S: 32位有符号整数 CV_32F: 32位浮点整数
CV_64F: 64位浮点整数
通道数:C1、C2、C3、C4分别代表单、双、三、四通道
例如:CV_8UC1
赋值:
Scalar(0,0,255);给每个像素的3个通道分别赋值
Mat A(Size(480,640),CV_8UC3,Scalar(0,0,255));
直接赋值:Mat a=Mat<double>(3,3) <<1.0,2.0);
循环赋值:
for(int i=0;i<c.rows;i++)
for(int j=0;j<c.cols;j++)
{
c.at<int>(i,j)=i+j;
}
类方法赋值:
A=Mat::eye(640,480,CV_8UC1);
A=Mat::ones(640,480,CV_8UC1);
A=Mat::zeros(640,480,CV_8UC1);
B=Mat::diag(A);//A是1维矩阵
1.3 运算
加减运算:为了给图像滤波、增强等操作。乘除:卷积
加减运算:两个矩阵的数类型要相同,常数结果保持与Mat类型相同
普通乘法:k=a*b;
内积:k=a.dot(b);
位乘:k=a.mul(b);
这三种运算,不解释。
1.4 元素读取
首先,Mat的存储是第一个元素的三个通道存储完成后再去存储后面的。
Mat类的属性
cols:列数 rows:行数 step:以字节为单位的矩阵宽度
elemSize():每个元素的字节数 total():矩阵中元素的个数
channels(): 矩阵的通道数
四种方式读取:
1.通过at方法
2.通过ptr指针
3.通过迭代器
4.通过矩阵元素的地址
二、图像的读取、显示、保存·
2.1 imread
Mat imread(filename,int flags)
参数二说明:flags常用几种方式
-1:带透明度 0:灰度 1:BGR
2.2 imshow和namedWindow
namedWindow("窗口名称",int flags=WINDOW_AUTOSIZE);
flags的常用参数:
WINDOW_NORMAL :用户可以随意调整窗口大小
WINDOW_AUTOSIZE:自动适应图像大小,不允许修改
其他参数自行查找
imshow("窗口名称",Mat对象);
waitKey(0);
destroyWindow();//关闭指定名称的窗口
destroyALLWindows();//关闭所有窗口
2.3 imwrite
bool imwrite(filename,InputArray img,vector<int> ¶ms = vector<int> ());
params:保存图片格式属性设置标志
CV_16U:png、jpeg、tiff
CV_32F
4通道
第三个参数的具体设置,不详细说明.
第三个参数一般不需要写,特殊情况才写
三、视频的读取、显示、保存
3.1 视频加载
1.VedioCapture类
VedioCapture::VedioCapture();//默认构造函数
VedioCapture::VedioCapture(filename,int 属性);//默认构造函数
属性:编码格式,参是否调用OpenNI
以上只是将视频文件加载到了VedioCapture中,还需要赋值给Mat,
video>>frame
2.VedioCapture方法
bool isOpened();判断是否读取成功
open("文件名")
get();获取像素尺寸、帧数、帧率。具体参数不讲
3.2 摄像头调用
3.3 视频数据䣌保存
VedioWriter(filename,int fourcc,double fps,Size frameSize,bool isColor=true);
参数2:视频编码格式
参数3:帧率,视频中每秒图像的张数
参数4:视频帧的尺寸
参数5:保存视频是否是彩色视频
四、XML和YMAL
有空再议