Mat类的结构
Mat类由两个部分组成,一个是矩阵头(包含矩阵尺寸、存储方法、存储地址等),另一个是指向所有像素的矩阵的指针。矩阵头的尺寸是常数值,矩阵本身的尺寸会因图像大小不同而不同,一般大的开销都在矩阵上面,矩阵头的开销很小。因此,当在程序中创建副本的时候,大的开销都是矩阵而不是矩阵头。
为了解决这个问题,OpenCV采用计数机制,指的是每一个副本都有自己的矩阵头,但是它们指向同一个矩阵。它通过矩阵头中的指针指向同一块地址实现,拷贝构造函数只复制矩阵头,不复制整个矩阵。
一般Mat类的赋值和拷贝,实际上只是操作了它的矩阵头,所以很多矩阵A,B,C可能都指向同一个数据矩阵。当你操作A时,B和C也会发生相应的改变。但是有些情况下,如果你想复制整个矩阵本身的时候,可以使用clone()或copyTo()。
OpenCV常用数据结构
1. 表示点的Point类
2. 表示颜色的Scalar类
Scalar()表示具有4个元素的数组,在OpenCV中被用来传递像素值,如果不使用第四个参数,则不需要写出来。需要注意的是,OpenCV中颜色值是BGR排列而不是传统上的RGB排列。
3. 表示尺寸的Size类
4. 矩形类Rect类