用了OpenCV一段時間,發現有cv::Mat和CvMat都可以表示圖像數據,只是卻不明白他們之間到底什麼區別,爲什麼一定要有這樣的兩種~Mat。後來跟蹤查看了定義,才知道原來cv::Mat是一個類(Class),而CvMat是一個Struct,從類型上就可以知道二者存在很大區別。前者除了幾個成員變量之外還有很多的成員函數和重載函數,可以實現很多的圖像數據處理功能,而後者只有幾個成員變量,要對其成員進行一些處理,需要借用別的函數。
|
typedef struct CvMat
{
int type;
int step;
/* for internal use only */
int* refcount;
int hdr_refcount;
union //數據的指針
{
uchar* ptr;
short* s;
int* i;
float* fl;
double* db;
} data;
#ifdef __cplusplus
union
{
int rows;
int height;
};
union
{
int cols;
int width;
};
#else
int rows;
int cols;
#endif
}
CvMat;
CvMat中的data數據只是矩陣數據的首地址,分配的內存大小爲行列乘積。對該內存塊的操作需要調用函數,也可以使用指針索引。