OpenCV之数据结构

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类 表示矩形



你可能感兴趣的:(图像处理)