cv::Mat與CvMat區別

用了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數據只是矩陣數據的首地址,分配的內存大小爲行列乘積。對該內存塊的操作需要調用函數,也可以使用指針索引。

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