1、Mat类的介绍
什么是Mat类,以及Mat类能存储什么数据?
OpenCV里用于存储矩阵数据的类型,与C++中的int double等数据类型一样,例如:
133 141 147 153 171
128 152 133 132 154
152 187 136 127 145
也就是说OpenCV存储时是以一个矩阵类型的数据将图像的每个像素存储的!
自己理解:其实Mat类就是一个保存图像像素值的一个数据类型,他有自己的数据的结构。你包括抠图等等其实也就是截取这个Mat内部对应的像素点的信息,然后构成一个新的Mat对象,也就是一个新的图像了。
Mat类由矩阵头和数据两部分组成:
矩阵头:中包含了尺寸(640*480)、行数、列数(与尺寸是对应的)、数据类型、(这个mat类里存的是int 还是 double类型的数据)、通道数(2x3x4的图像)、引用次数等信息等(例如Mat a Mat b 两个数据对象公用的是一个mat数据图像 img,那么当删除img时他们两个引用的就是空的。还可以避免我在删除 a的img时 由于b还在引用,却给删了。)
数据部分:就是数据了。
2、Mat能存储什么样的数据类型呢?
cv::Mat_<_Tp> //自定义的类型
cv::Mat_<_Double> //
cv::Mat_<_Float> //
cv::Mat_<_uchar> //
cv::Mat_<_unsigned char> //
3、Mat类如何创建:三种常见的创建方式
第一种:
cv::Mat::Mat(int rows,/*构造矩阵的行数*/
int cols,/*矩阵的列数*/
int type /*矩阵中存储的数据类型此处除了CV_8UCI CV_64FC4等从1到4通道外,还 提供了更多通道的参数,通过CV_8UC(n)中的n来构建多通道矩阵,其中 最大可以取到5