首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

OpenCV 筆記(一):C 介面數據結構命名規則(CvMat, CvMatND, CvFileNode...)

     編輯:C++ 入門

核心規律:Cv* 結構體僅存元數據,不擁有數據內存

OpenCV 1.x C 介面中,以 Cv 開頭的結構體(CvMat, CvMatND, CvFileNode 等)均為輕量級頭部,包含:

  • 類型標譤(type)
  • 維度/步長(rows, cols, step 或 dim[])
  • 引用計數(refcount)
  • 數據指針聯合體(data.ptr/s/i/fl/db)

實際像素/數據內存由外部分配,結構體僅持有指針。這設計便於 ROI、子矩陣視圖、多矩陣共享數據。

CvMat 定義解析

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:該維步長(字節)。

CvFileNode:XML/YAML 存儲節點

前綴含義示例
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 介面僅用於維護舊代碼或嵌入式環境。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved