OpenCV 1.x C 介面中,以 Cv 開頭的結構體(CvMat, CvMatND, CvFileNode 等)均為輕量級頭部,包含:
type)rows, cols, step 或 dim[])refcount)data.ptr/s/i/fl/db)實際像素/數據內存由外部分配,結構體僅持有指針。這設計便於 ROI、子矩陣視圖、多矩陣共享數據。
CV_INLINE CvMat cvMat(int rows, int cols, int type, void* data) {
CvMat m;
m.type = CV_MAT_MAGIC_VAL | CV_MAT_CONT_FLAG | type;
m.cols = cols; m.rows = rows;
m.step = m.cols * CV_ELEM_SIZE(type);
m.data.ptr = (uchar*)data;
m.refcount = m.hdr_refcount = 0;
return m;
}
typedef struct CvMatND {
int type, dims;
int* refcount; int hdr_refcount;
union { uchar* ptr; float* fl; double* db; int* i; short* s; } data;
struct { int size; int step; } dim[CV_MAX_DIM];
} CvMatND;
dims:維度數(≤ CV_MAX_DIM=32)。dim[i].size:第 i 維大小,step:該維步長(字節)。前綴 含義 示例 Cv 核心數據結構(頭部) CvMat, CvMatND, CvFileNode, CvSeq, CvMemStorage cv 函數/方法 cvCreateMat, cvmGet, cvSave CV_ 宏/常量/標志 CV_32FC1, CV_MAT_MAGIC_VAL, CV_ELEM_SIZE ICv 介面(C++ 早期) ICvMat 現代建議
OpenCV 2.0+ 推薦使用 C++ 介面
cv::Mat、cv::FileStorage等,RAII 管理內存,API 更安全易用。C 介面僅用於維護舊代碼或嵌入式環境。