Mat数据结构
Ipl(这里的l是小写的L,其他都是大写的i)Image* OpenCV1.X时代的基于C语言接口的图像存储格式。退出前需要释放内存,否则会导致内存泄漏。
Mat OpenCV2.X时代之后,引入新的C++接口Mat类
IplImage *img = cvLoadImage(...);
Mat mat(img); //这里可以直接转换IplImage到Mat
关于Mat类
(1)不特别指定的情况下,内存空间根据数据的大小自动改变,保证了内存利用率。
(2)不必再离开时释放内存空间
Mat是一个类,由两部分组成:信息头和一个指向存储像素矩阵的数据指针。
OpenCV使用了引用计数机制,让每个Mat对象拥有自己的信息头,共享同一个数据矩阵。虽然它们的信息头不一样,但是通过任何一个对象所做的改变也会影响其他对象。
Mat A,B;
A = imread(...);
B = A;
Mat C(A);
每次引用都会增加矩阵数据的引用次数。每个Mat对象拥有自己的信息头,共享同一个数据矩阵。
另外,复制矩阵数据也有方法:
①Mat D = A.clone();
②Mat E; A.copyTo(E);
此时改变D、E的数据,不会影响A中的数据。
其他常用数据结构
Point类 二维坐标点
Scalar类 表示具有4个元素的数组,常用于传递像素值,如RGB颜色值。
Scalar(b,g,r)
Size类 表示尺寸
Rect类 表示矩形