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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章