动态可变存储
大数组类型中最主要的是,cv::Mat,可以看成是OpenCV库, C++ 实现的核心内容;OpenCV库的绝大多数函数,或是cv::Mat的成员,或是以cv::Mat作为参数,或是返回值是cv::Mat,或是其一或是所有; cv::Mat一般用于任意维度的稠密数组,这个稠密的意思是与数组单元相对应,都有一个数据存放在内存,哪怕这个数组单元存放的是零;大多数的图像存储稠密数组;
使用稀疏数组的是直方图,cv::SparseMat;
The cv::Mat 类,多维稠密数组
cv::Mat类可以作为任意维度的数组使用,其数据可以看做是以按照栅格扫描顺序存储的n维数组;在一维数组中,元素是按顺序排列的;在一个二维数组中,数据按行组织的,每一行也按顺序排列;对于三维数组,所有的通道都被行填充,每一个通道同样按顺序排列;
所有的矩阵都包含,一个表示它所包含数组类型的元素flag,一个表示其维度的元素dims,分别表示行列的数目的元素rows和cols(dims不大于2),一个指示数据真正存储位置的data指针,一个表示该内存区域有多少个引用的refcount元素;
cv::Mat中的元素可以是一个简单的数字,也可以是多个数字,在包含多个数字的时候,它就被称为多通道数组;
构造一个数组
可以用cv::Mat实例化一个对象,构造一个数组,该数组没有大小也没有数据类型,可以利用对象调用Create()函数,参数为行、列、类型来分配数据;
cv::Mat m; // Create data area for 3 rows and 10 columns of 3-channel 32-bit floats m.create( 3, 10, CV_32FC3 ); // Set the values in the 1st channel to 1.0, the 2nd to 0.0, and the 3rd to 1.0 m.setTo( cv::Scalar( 1.0f, 0.0f, 1.0f ) );
等同于
cv::Mat m( 3, 10, CV_32FC3, cv::Scalar( 1.0f, 0.0f, 1.0f ) );