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